请教C++高手~~

来源:百度知道 编辑:UC知道 时间:2024/06/04 12:20:14
题目是求1000以内的所有完数,所谓完数就是一个数的所有因数之和等于这个数,例如6=1+2+3;
请问下面的程序有什么问题?结果显示只有1
#include<iostream.h>
#include<math.h>
void main()
{
int h,i,j,sum;
for(i=1;i<=1000;i=i+1)//限制所取的完数是在1000以内
{for(sum=1,h=i,j=2;j<=i;j++)//
{if (i%j==0)
sum=sum+j,i=i/j;}
if (h==sum) cout<<h<<endl;}
}
先谢谢了!

#include<iostream.h>
#include<math.h>
void main()
{
int h,i,j,sum;
for(i=1;i<=1000;i=i+1)
{
for(sum=1,h=i,j=2;j<i;j++)
{
if (i%j==0)
sum=sum+j;
}
if (h==sum)
cout<<h<<endl;
}
}
输出结果1 6 28 496
条件j<=i改为j<i如果j<=i的话你想下是不是只有1才满足
i=i/j我不知道什么意思,我把它删了才行。

#include<iostream.h>
#include<math.h>
void main()
{
int h,i,j,sum=0;
for(i=1;i<=1000;i=i+1)//限制所取的完数是在1000以内
{
for(sum=1,h=i,j=2;j<i;j++)// 把j<=i改为j<i;要不然j取i时这个完数的因子和肯定大于它,也就找不到完数了。
{
if (i%j==0)
sum=sum+j;//去掉i=i/j,i应该在此循环中保持不变
}
if (h==sum)
cout<<h<<endl;
}
}

#include<iostream.h>
#include<math.h>
void main()
{
int i,j,sum;
for(i=1;i<=1000;i=i+1)//限制所取的完数是在1000以内
{sum=0;
for(j=1;j<i;j++)//
{if