[求助]C语言基础 Static问题
朋友问我求1~1000的完数的题目,我给他的代码如下:#include "stdio.h"
int ws(int i){
int k,sum=0,j=0;
int a[100];
for(k=1;k<=i/2;k++)
if(i%k==0) {
sum+=k;
a[j]=k;
j++;
}
if(sum==i) {
for(k=0;k<j-1;k++) printf("%d+",a[k]);
printf("%d",a[k]);
return 1;
}
return 0;
}
void main()
{
int i;
for(i=6;i<=1000;i++)
if(ws(i)==1) printf("=%d\n",i);
}
问题在ws函数里,a[]是记录每一个完素的所有因子,1000以前最大完数496,总共有9个因子,按道理说定义a[10]就够用了,可为什么定义a[10]就是会出错?而把int a[10]改成static int a[10]又正确,为什么?
static 无非是保持a[10]在内存不释放,而且在编译时给赋初值,一定要这样吗?
[[it] 本帖最后由 三断笛 于 2008-6-1 15:29 编辑 [/it]]
----------------解决方案--------------------------------------------------------
请问180的约数有多少个??
[color=white]
----------------解决方案--------------------------------------------------------
180的约数有16个
那为什么把int a[100]改成 static int a[10]运行正确呢?
----------------解决方案--------------------------------------------------------
不是18个吗??
那个并不是运行正确,是还没有改写掉关键数据,你才没死掉
[color=white]
----------------解决方案--------------------------------------------------------
不是16个也不是18个 是17个唉
是不是定义static int a[10]在运算ws(180)虽然出现了错误,但没导致程序出错?只是没有提示错误而已?
----------------解决方案--------------------------------------------------------
绝对是18个约数,3*3*2的结果,除非你不计算它本身,那就减一
[color=white]
----------------解决方案--------------------------------------------------------
算完全数有什么公式?
----------------解决方案--------------------------------------------------------
求完全数有什么公式? 顶
----------------解决方案--------------------------------------------------------
C语言里没找到有求完全数的公式 自己写个函数求
----------------解决方案--------------------------------------------------------