首页 > 解决方案 > 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 perfect\n", numero);
        }
        number++;
    }

    return 0;   
}

标签: cwhile-loopperfect-numbers

解决方案


如前所述,您必须sum在循环开始时将 重置为零。
您还必须替换numeronumber(错字)。
为了更进一步,我建议您使用 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 perfect\n", number);
        }
    }

    return 0;
}

输出:

6 is perfect
28 is perfect
496 is perfect

推荐阅读