题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
找出1000 以内的所有完数。
1. 程序分析:请参照程序<--上页程序14.
2.程序源代码:
main()
{
static int k[10];
int i,j,n,s;
for(j=2;j<1000;j++)
{
n=-1;
s=j;
for(i=1;i<J;I++)
{
if((j%i)==0)
{ n++;
s=s-i;
k[n]=i;
}
}
if(s==0)
{
printf("%d is a wanshu",j);
for(i=0;i<N;I++)
printf("%d,",k[i]);
printf("%d\n",k[n]);
}
}
}
试了一下你的程序,你写得有问题,完成你的运算数组k的长度10是不够的,最小长度需要31,因此运算过程中会访问越界而出现异常结果,把k的长度改成31以上就无论是否是static变量都正常了。
之所以会出现static和非staic变量的结果不一样,那是因为static变量存储在全局变量区,而非static时存储在栈中,不同的编译器的也处理方式不大一样,越界访问后呈现的结果也不大一样,但大多没有多少保护机制,因此有的时候仍然能正常运行出结果的。而异常结果就没有什么好考究的了,像我拿vc来运行的时候就都能看到结果,只是退出的时候报越界访问。
楼上说得好,错误是k[n]=i;这句,数组越界的问题。
酱紫啊~我是来看答案的....