{
if(p%i==0)
{
sum=sum+i;
}
if(p==sum)
{
printf("%d",p);
}
}
}
return 0;
}
2处地方有问题:
我给你重新写了一遍,代码见下方。如果对你有帮助,请采纳。
#include <stdio.h>
int main() {
int p, i, sum;
printf("1000以内的所有完数为\n");
for (p = 2; p < 1000; p++) {
sum = 0;
for (i = 1; i < p; i++) {
if (p % i == 0) {
sum += i;
}
}
if (p == sum) {
printf("%d ", p);
}
}
return 0;
}
改动处见注释,供参考:
#include <stdio.h>
int main()
{
int p,i,sum=0;
printf("1000以内的所有完数为:\n");
for(p=2;p<1000;p++)
{
sum = 0; //sum 需复位
for(i=1;i<p;i++) //求得数p得因子和
{
if(p%i==0)
{
sum=sum+i;
}
}//这个'}'移动这里
if(p==sum)
{
printf("%d ",p);
}
}
return 0;
}
首先,每次循环后应该初始化sum=0,否则一直用之前的sum加新的因数不能得到想要的结果;第二if(p==sum)的判断应该放在for(i=1;i<p;i++)循环之外,保证循环结束后再判断
#include<stdio.h>
int main()
{
int p,i,sum=0;
printf("1000以内的所有完数为");
for(p=2;p<1000;p++){
sum=0;
for(i=1;i<p;i++)
if(p%i==0)
sum+=i;
if(p==sum)
printf("%d ",p);
}
return 0;
}
//正确参考答案
#include <stdio.h>
int main()
{
int num, sum, i;
for(num = 1; num <= 1000; num ++)
{
sum = 0; //每次判断一个数都要将 sum 初始化为 0
for (i = 1; i < num; i++)
{
if (num % i == 0) //num 能被 i 整除,说明 i 是 num 的因子
{
sum += i; //累加因子
}
}
if(sum == num)
{
printf("%d", num);
}
}
return 0;
}