当前位置: 代码迷 >> C语言 >> [求助]C语言基础 Static问题
  详细解决方案

[求助]C语言基础 Static问题

热度:223   发布时间:2008-06-01 15:27:07.0
[求助]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]]
搜索更多相关的解决方案: C语言  Static  基础  

----------------解决方案--------------------------------------------------------
请问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语言里没找到有求完全数的公式 自己写个函数求
----------------解决方案--------------------------------------------------------
  相关解决方案