c语言求完数,请高手看一下下面代码为什么求不到正确的结果,谢谢!

来源:百度知道 编辑:UC知道 时间:2024/09/23 04:06:01
#include<stdio.h>
void main()
{int a=0,i,c,j;
for(i=1;i<1001;i++)
{
for(j=i;j>0;j--)
{if(i%j==0)
a=a+j;
}
if(a==i)
{printf("%d ",i);
printf("its factors are ");
for(c=1;c<=a;c++)
{if(a%c==0)
printf("%d,",c);}
}
}
getch();
}
希望不要改变程序整体方法(其他方法我有,我是想知道这段中有什么错误)谢谢

#include "stdio.h"
void main()
{
int a,i,c,j;
for(i=1;i<1001;i++)
{
a=0; //判断另一个数的时候a要重置为0
for(j=i-1;j>0;j--) //j不能从i算起, 不然除了i=1外,计算其他数的因子和时 总是a>i,进不了下面的if(a==i)条件
{
if(i%j==0)
a=a+j;
}
if(a==i)
{
printf("\n%d ",i);
printf("its factors are ");
for(c=1;c<a;c++) //这里c<a还是c<=a随你, 就是看一个数的本身算不算自己的因子
{
if(a%c==0)
printf("%d,",c);
}
}
}
}

for(j=i;j>0;j--) ===> for(j=i-1;j>0;j--)

完数是,比如6=1+2+3...称为完数
我怎么看都不觉得你的程序有"一个数"
而且i循环的时候总是被j整除,i=j嘛
就执行不到if(a==i)了
for(i=1;i<1001;i++)
{
for(j=i;j>0;j--)问题就在这
不过我试了几次,然后执行下去,总是执行不到a=a+j;