c++,求出1~1000之间的完全数。所谓完全数是指该数恰好等于它的因子(本身除外)之和的数

如题所述

第1个回答  2007-11-11
此程序已经过本人的严格测试,绝对没有问题!
欢迎采用为正确答案!

#include<stdio.h>
main()
{
int i,j,n,s=0;
printf("1到1000的完数有:");
for(i=1;i<=1000;i++,s=0)
{for(j=1;j<=i/2;j++)
if(i%j==0) s+=j;
if(i==s) printf("% d",s);}
}
第2个回答  2007-11-11
结果为 6 28 496
前两天做过这道题了
#include<windows.h>
#include<iostream>
using namespace std;

main()
{
int i,j,sum=0;
for(i=2;i<=1000;i++)
{
for(j=1;j<i;j++)
if(i%j==0)
sum=sum+j;
if(sum==j)
cout<<i<<" ";
sum=0;
}
system("pause");
}本回答被网友采纳
第3个回答  2007-11-11
完全数的定义有问题吧,如果按人的定义,程序如下,但只能求出1~9符合:

main()
{
int i, j, t, s;

for (i = 1; i <= 1000; i++)
{
s = 0;
j = i;
while (j)
{
t = j % 10;
j /= 10;
s += t;
}
if (i == s)
{
printf("%d\n", i);
}
}
}
第4个回答  2007-11-12
本程序可节约时间和空间,效率更高.
#include<iostream>
using namespace std;
void main()
{
cout<<"1~1000之间的完全数有:";
int i,j,sum=0;
for(i=2;i<=1000;i++)
{
for(j=1;j<=i/2;j++) //i的最大因子<=i/2,这样循环到i/2,从而减少循环次数,节约时间和空间
if(i%j==0)
sum=sum+j;
if(sum==i)
cout<<i<<" ";
sum=0;
}
}
第5个回答  2007-11-11
#include<iostream>
using namespace std;
int main()
{
int i,j,sum=0;
cout<<"1-1000的完数有:"<<endl;
for(i=2;i<=1000;i++)
{
for(j=1;j<i;j++)
if(i%j==0)
sum=sum+j;
if(sum==j)
cout<<i<<endl;
sum=0;
}
return 0;
}
相似回答