1至1000之间的完美数字

时间:2018-08-22 08:17:19

标签: c while-loop perfect-numbers

我不明白为什么该程序没有给出任何输出。我只是看不到错误。这是一个程序,用于查找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;   
}

5 个答案:

答案 0 :(得分:0)

您没有在循环中重置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 perfect\n", numero);
        }
        number++;
    }

    return 0;

}

根据Wikipedia作记录:

  

在数论中,理想数是等于的正整数   与其适当的正除数之和,即   正除数,不包括数字本身(也称为   等分和)。等效数字是一半的数字   其所有正除数(包括其自身)的总和,即σ1(n)   = 2n。

答案 1 :(得分:0)

如上所述,您必须在循环开始时将sum重置为零。
您还必须用numero(典型)替换number
进一步讲,我建议您使用for循环而不是while循环,我发现它更具可读性,恕我直言。当i <= number/2进行优化时,内部for循环也可以停止。这是我对代码的建议:

#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

答案 2 :(得分:0)

在1到1000之间有3个完美数字。

{6, 28, 496}

您的代码大部分是正确的,但是您忘记了每次循环迭代后都要重置总和值。

 ...
    }
    number++;
    sum = 0; // set sum to zero at the end of the while loop
  }

而且您在number函数中将numero变量拼写为printf

printf("%d is perfect\n", numero);

答案 3 :(得分:0)

#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 perfect\n", number);
        }
        number++;
    }
    return 0;
}

将sum的值重置为0,并将numero更改为printf中的数字

答案 4 :(得分:-1)

此代码工作正常,只需稍加修改即可采纳其他答案中提出的所有建议。

#include<stdio.h>

void main(){

int number = 1;

    while(number <= 1000){
    
       int i, sum = 0; 

       for(i=1; i<number; i++){

          if(number%i == 0){

              sum+=i;               
          }

          if( i == number-1 && sum == number){
             
               //modify the expression within the parenthesis
            
               printf("%d is a perfect number.\n", number);
            
               sum=0;
          }

      }

      number++;

  }

}

输出:

6 is a perfect number.
28 is a perfect number.
496 is a perfect number.

最后一个if语句括号内的表达式需要修改,除了其他答案指出的其他错误。这样做是为了防止包含这样的数字,在这种情况下,因子的总和等于计算所有因子之前的数字。 如果不修改,输出也应包括数字 24。