求1000以内的完数

来源:百度知道 编辑:UC知道 时间:2024/05/03 09:25:32
#include <iostream>
using namespace std;
int main()
{
int q,n,t,i,sum, a[1000];

for(n=2;n<=1000;q++)
{
t=-1;i=0,sum=0;
for(q=1;q<n;q++)
{
if(n%q==0)
{
a[i]=q;
i++;
t++;
}
}
for(i=0;i<=t;i++)
{
sum=sum+a[i];
}
if(q=sum)

cout<<q<<"its factors are";
for(i=0;i<=t;i++)
{
cout<<a[i]<<" ";
}
}
return 0;
}

为什么会算不出来呢 谢谢啦

#include < stdio.h>
main()
{
int m,i,s;
for(m=1;m<=1000;m++) /* 外循环,循环1000次也就是要求的1000以内的数*/
{
花括号给你分开 这个花括号之内都是内循环,每次外循环的前2个表达式执行完,进入内循环,内循环执行完再到外循环的第三个表达,如此是为循环的流程;

s=0; /*这是每次进入内循环之前都先给S赋值为0,就是里边这个FOR每次执行完再次进入这个FOR循环时S的值都是0,然后参加运算*/
for(i=1;i<m;i++) /*I 就是完数的因子*/
if(m%i==0) /*当M取余I等于0的时候,证明I可以被M整除,既I为M的因子,当0==0时IF表达式为真,执行下边的语句*/
s=s+i; /*S是变量,一定要搞明白是把后边的表达式S+I的值赋给S,如此循环,最后S的值就就他所有因子相加的合*/
if(s==m) /*当S==M时输出S的值,是确保他只输出一个最终的结果,你把这句去掉,就会出现6,28,496的所有因子*/
printf("%d,",s);

}
} 如还有不懂的地方可以给我留言,我看到后会给你回答

//帮你把错误给分析了,都是粗心造成的低级错误。下面都有注释了。以后得多仔细~~~
#include <iostream>
using namespace std;
int main()
{
int q,n,t,i,sum, a[1000];
for(n=2;n<=1000;n++) //这里应该是n++,你写成q++了。所以变成死循环了
{
t=-1;i=0,sum=0;
for(q=1;q<n;q++)
{
if(n%q==0)
{
a[i]=q;
i++;
t++;