我不明白为什么这个程序没有给出任何输出。我只是看不到错误。这是一个找到 1 到 1000 之间的每个完美数字的程序。请帮我找到错误。谢谢。
#include <stdio.h>
int main(){
int number=1, i, sum=0;
while(number<=1000){
for(i=1; i<number; i++){
if(number%i==0){
sum+=i;
}
}
if(sum==number){
printf("%d is perfectn", numero);
}
number++;
}
return 0;
}
如前所述,您必须在循环开始时将sum
重置为零。
您还必须将numero
替换为number
(拼写错误(。
为了更进一步,我建议您使用 for 循环而不是 while 循环,恕我直言,我觉得这更易读。内部 for 循环也可以在i <= number/2
优化时停止。这是我的代码建议:
#include <stdio.h>
int main(){
int sum;
for(int number = 1;number <= 1000; number++){
sum = 0;
for (int i = 1; i <= number/2; i++){
if (number % i == 0){
sum += i;
}
}
if (sum == number){
printf("%d is perfectn", number);
}
}
return 0;
}
输出:
6 is perfect
28 is perfect
496 is perfect
您没有重置循环中的sum
:
#include <stdio.h>
int main(){
int number=1;
while(number<=1000){
int i, sum=0;
for(i=1; i<number; i++){
if(number%i==0){
sum+=i;
}
}
if(sum==number){
printf("%d is perfectn", numero);
}
number++;
}
return 0;
}
根据维基百科记录:
在数论中,完美数是相等的正整数 到其适当的正除数之和,即其 正除数不包括数字本身(也称为其 等分和(。等价地,完美数是一半的数字 其所有正除数(包括自身(的总和,即σ1(n( = 2n。
1 到 1000 之间有 3 个完美数。
{6, 28, 496}
您的代码大多是正确的,但您忘记在每次循环迭代后重置总和值。
...
}
number++;
sum = 0; // set sum to zero at the end of the while loop
}
而且您将number
变量拼写错误printf
函数内部numero
。
printf("%d is perfectn", numero);
#include <stdio.h>
int main(){
int number = 1, sum = 0;
while(number<=1000){
sum = 0;
for(int i = 1; i < number; i++){
if(number % i == 0){
sum += i;
}
}
if(sum == number){
printf("%d is perfectn", number);
}
number++;
}
return 0;
}
将 sum 的值重置为 0,并在 printf 中将数字更改为数字