计算1000以内完数代码,用gcc编译通过,执行时出现段错误,请各位大虾指点

xiaofan613 2005-08-15 10:24:06
#include<stdio.h>
main()
{
int k[10],a,i,n=0,s;
for(a=2;a<=1000;a++)
{
s=a;
for(i=1;i<=a;i++)

if( (a%i)==0 )
{
n++;
s=s-i;
k[n]=i;
}

if(s==0)

{ printf("\n%d is a wangshu,it is :",a);
for(i=1;i<n;i++)
printf("%d,",k[i]);
printf("%d\n",k[n]);
}

}

}
...全文
246 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SammyLan 2005-08-17
  • 打赏
  • 举报
回复
晕了
弄那么复杂那么长干什么啊
void Func(int const N)
{
for(int i=1;i<1000;++i)
{
int sum=0;
int p=i/2;
for (int j=1;j<=p;++j)
if (i%j==0) sum+=j;
if (sum==i) cout<<sum<<endl;
}
}
yzhxhwt 2005-08-16
  • 打赏
  • 举报
回复
你执行./a.out看看!
kingofghost 2005-08-16
  • 打赏
  • 举报
回复
可能是数组越界。完数是什么?
你能确定2到1000之间只有10个“完数”?
awperpvip 2005-08-16
  • 打赏
  • 举报
回复
管他越界不越界,
我看没问题,只要这样:
#include<stdio.h>
main()
{
int k[10],a,i,n=0,s;
for(a=2;a<=1000;a++)
{
s=a;
for(i=1;i<=a/2;i++)

if( (a%i)==0 )
{
n++;
s=s-i;
k[n]=i;
}

if(s==0)

{ printf("\n%d is a wangshu,it is :",a);
for(i=1;i<n;i++)
printf("%d,",k[i]);
printf("%d\n",k[n]);
}

}
return 0;
}
bugebear3 2005-08-16
  • 打赏
  • 举报
回复
肯定是数组越界,

例如当a=1000时,
for(i=1;i<=a;i++)

if( (a%i)==0 )
{
n++;
s=s-i;
k[n]=i;
}

数组肯定越界了.
xiaocai0001 2005-08-16
  • 打赏
  • 举报
回复
完数是指一个数等于它所有的约数(不包括自身)的和。如
28的约数有:1,2,4,7,14,28.
不包括它自身的约数和1+2+4+7+14 = 28,这样的数就称为完数。
其他的还有什么守形数啦,水仙花数啦,花样多着呢。
SammyLan 2005-08-15
  • 打赏
  • 举报
回复
弄那么复杂干什么啊
void Func(int const N)
{
for(int i=1;i<1000;++i)
{
int sum=0;
int p=i/2;
for (int j=1;j<=p;++j) {
if (i%j==0) {
sum+=j;
}
}
if (sum==i) {
cout<<sum<<endl;
}
}
}
zyk801228 2005-08-15
  • 打赏
  • 举报
回复
n,和k[]都应该清0吧
vvvvy 2005-08-15
  • 打赏
  • 举报
回复
不知道完数是什么?不过那个k[n]估计会越界倒是可以肯定的

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧