C语言 介于 1 和 1000 之间的完美数字



我不明白为什么这个程序没有给出任何输出。我只是看不到错误。这是一个找到 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 中将数字更改为数字

相关内容

  • 没有找到相关文章

最新更新