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