C语言求完数

完数就是因子之和等于数本身,比如6=1+2+3,求1000以内的完数程序

#include <stdio.h>
int main()
{
int i,j,sum,temp; //定义数,因子
sum=0;
for(i=2;i<=1000;i++)
{
temp=i;
for(j=1;j<i;j++)
{
if(i%j==0) //当I被J整除
{ //原数等于除完因子后的数
temp/=j; //把因子加到sum中
sum+=j;
}
}
if(sum==i) //因子相加和等于原数I时
printf("It's a Perfect n:%d\n",i);
}
getchar(); //回车结束程序
getchar();
return 0;
}

这个程序有什么问题?
不要从编程百例中把那个复制出来
是要你找出这个的问题
指出错误在哪
正确的应当是什么
谢谢
这样只能显示一个6,如果是28的话就只能算出1+2+2+7=12,而不是1+2+4+7+14=28,这个程序稍加修改是否可以改成正确的?

int main()
{
int i,j,sum;
for(i=2;i<=1000;i++)
{
sum=0;
for(j=1;j<i;j++)
{
if(i%j==0)
{
sum+=j;
}
}
if(sum==i)
printf("It's a Perfect n:%d\n",i);
}
getchar();
getchar();
return 0;
}
我觉得temp,没有用的必要,错误在于第一次循环之后sum的值已经不为0了,无法记录下一个i 的因子之和,所以要在第一层循环里有sum=0;这个语句,现在你在试试,看看是不是运行正确了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-07-27
#include <stdio.h>
int main()
{
int i,j,sum; //定义数,因子

for(i=2;i<=1000;i++)
{
sum=0;
for(j=1;j<i;j++)
{
if(i%j==0) //当I被J整除
{ //原数等于除完因子后的数
sum+=j; //把因子加到sum中
}
}
if(sum==i) //因子相加和等于原数I时
printf("It's a Perfect n:%d\n",i);
}
getchar(); //回车结束程序
getchar();
return 0;
}

把sum=0;移到for语句中
还有temp不是必要的。
6、28、496是完数。
相似回答