求1000以内的所有完数,代码如下:
int main()
{
int k[10] = {0};
int i,j,n,s;
for(j=2; j<1000; j++)
{
s = j;
n = -1;
for(i=1; i<j; i++)
{
if((j%i) == 0)//除尽说明i是j的因子之一
{
n++;
s = s-i;
k[n]=i;
}
}
if(s==0)
{
printf("%d is WanShu:\n", j);
for(int i=0;i<=n; i++)
printf("%d,",k[i]);
printf("\n");
}
}
return 0;
}
结果为:
6 is WanShu:
1,2,3,
28 is WanShu:
1,2,4,7,14,
当我把代码中的数组k[10]改为k[20],长度变为20时,结果就为:
6 is WanShu:
1,2,3,
28 is WanShu:
1,2,4,7,14,
496 is WanShu:
1,2,4,8,16,31,62,124,248,
这是什么原因呢?