一个求完数的一种方法为何不对?
今天我帮别人写一个简单的程序,简单程序不简单呀,出现让我不思其问题?实在要请高手帮忙了.下面是第一种方法.
#include "stdio.h"
main()
{
int n,i,j,c[10]={0},m=0;
for(i=1;i<=1000;i++)
{
for(j=1;j<i;j++)
{
if(i%j==0)
c[m]=j;
m++;
}
if(i==c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9])
printf("%d\t", i);
}
}
用TC是行不通的.报发生什么指令性错误,还有什么应用程序错误,该内存不能读之类的.用VC开始也出现了错误,多运行了几次,结果不全.只有6,而用下面的方法就全了,
#include "stdio.h"
main()
{
int j,i,s;
for(i=2;i<1000;i++)
{ s=i;
for(j=1;j<i;j++)
{
if(i%j==0)
s=s-j;
}
if(s==0)
printf("%d\n", i);
}
}
答案是6,28,196符合要求.
我就郁闷了,为什么会出现这样的情况了,真是不思其解呀.请高手不甚指教,偶会铭记于心,感激涕零呀.提醒一句1000以内的所有数的因子数没有超过10个,所以用c[10]没有错吧.
[[italic] 本帖最后由 way3 于 2008-1-9 20:22 编辑 [/italic]]