用C语言,找出1000之内的所有完数。

一个数如果恰好等于它的因子(不包含自身的所有因子)之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是完数。
#include <stdio.h>
void main()
{
int i,j,s,m;
for (i=6;i<=999;i++)
{
s=0;
for (j=1;j<=i;j++)
if(i%j==0) s=s+j;
if(i-s==0)
{
printf("%d its factors are ",i);
for (m=1;m<=i;m++)
if(i%m==0)
printf("%d",m);
printf("\n");
}
}
}
这是我自己编的,为什么就得不到结果呢,哪里出错了,谢谢了
最后要求按照下面格式舒服其因子:
6 its factors are 1,2,3
程序不需要大家重新写,我只是想知道我的程序哪里错了。谢谢了

你的程序有两个地方有错:
1、for (j=1;j<=i;j++)去掉=,改为for (j=1;j<i;j++);
2、for (m=1;m<=i;m++)去掉=,改为for (m=1;m<i;m++);
至于为什么?估计你会想得到的,追问

j=i和m=i,为什么不行啊??刚学C,还有好多不懂,呵呵

追答

就用你的例子说明吧:
“6的因子为1、2、3,而6=1+2+3,因此6是完数。”
加上“=”是这样的:
“6的因子为1、2、3、6,而6=1+2+3+6(怎么可能),因此6是完数。”肯定不对啦,所以程序没结果

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-19
之前帮别人用纯粹的while写过,复制一下吧,等一下,在用for写个

# include <stdio.h>
main()
{
int i,j,sum;
i=1;
while(i<=1000)
{
j=1;
sum=0;
while(j<i)
{
if(i%j==0)
sum+=j;
++j;
}
if(sum==i)
{
printf("%4d its factors are ",i);
j=1;
while(j<i)
{
if(i%j==0)
printf("%4d",j);
++j;
}
printf("\n");
}
++i;
}
}追问

不用再写一个了,帮我看下我的程序错在哪里了吧

追答

#include
void main()
{
int i,j,s,m;
for (i=6;i<=999;i++)
{
s=0;
for (j=1;j<i;j++) //修改,j<i即可
if(i%j==0) s=s+j;
if(i-s==0)
{
printf("%d its factors are ",i);
for (m=1;m<i;m++) //修改,m<i即可
if(i%m==0)
printf("%4d",m); //输出效果优化
printf("\n");
}
}
}

第2个回答  2011-08-19
#include <stdio.h>
void main()
{
int i,j,s,m;
for (i=2;i<=999;i++)
{
s=0;
for (j=1;j<i;j++)
if(i%j==0)
s=s+j;
if(i-s==0)
{
printf("%d its factors are ",i);
for (m=1;m<i;m++)
if(i%m==0)
printf("%d,",m);
printf("\n");
}
}
getchar();
}
第3个回答  2011-08-19
int i;
for(i=1;i<1000;i++)
{int a[100],sum=0,j,p=0;
for(j=1;j<i;j++)
if(i%j==0)
{a[p++]=j;
sum+=j;
}
if(sum==i)
{printf("%d its factors are ",sum);
for(j=0;j<p;j++)
printf("%d,",a[j]);
printf("\n");
}
}
第4个回答  2011-08-19
wer
相似回答