读书人

这是咋回事

发布时间: 2012-05-13 16:39:43 作者: rapoo

这是怎么回事啊
刚学编程,有这么个问题:一个数如果恰好等于它的因子之和,这个数则被称为完数,例如,6的因子为1,2,3,而6=1+2+3,因此6就是完数,找出1000之内的所有完数。
我自己做的是这样
#include<iostream>
using namespace std;
int main()
{
int a,b,s;
for(a=1;a<=1000;a++){
b=1;
if(b<=a){
do{
if(a%b==0)s=s+b;
b=b+1;
}
while(b<=a);
if(a=s)cout<<a<<endl;
}
}
return 0;
}
调试是好的,就是出来的不是完数,大哥们帮帮忙看下是怎么回事啊、、

[解决办法]
if(a=s)cout<<a<<endl;
应该是==,
1做为特例直接输出就可以了
while(b<=a);
应该是<,
并且里面有些没用的如if(b<=a){
[解决办法]
楼主的思路是对的,只是用错了判断符。
逻辑上1楼改对了。

提个优化建议“if(b<=a){”是没意义的,前面才置了1,
将while(b<=a);改为while(b<a/2+1);

另外楼主下次贴代码注意用代码格式。工具栏上有。
[解决办法]

探讨

楼主的思路是对的,只是用错了判断符。
逻辑上1楼改对了。

提个优化建议“if(b<=a){”是没意义的,前面才置了1,
将while(b<=a);改为while(b<a/2+1);

另外楼主下次贴代码注意用代码格式。工具栏上有。

[解决办法]
#include <IOSTREAM>
using namespace std;
int main()
{
int i,n=0,m,s=0;
for(i=1;i<1000;i++)
{
for(m=1;m<=i/2;m++)
{
if(i%m==0)
{
s=s+m;
}
}
if(i==s)
cout<<i<<" ";
s=0;
}
system("pause");
return 0;
}
这是我写的,楼主可以参考下
[解决办法]
C/C++ code
#include<iostream>using namespace std;int main(){    int a,b,s;    for(a=1;a<=1000;a++){            b=0;        s=0;        //这句一定不能少,不然不能重新计算因子的和        do{            ++b;            if(a%b==0)    //能够被整除            {                s=s+b;            }                        }while(b<=a/2+1); //因为要求因子的集合最大的因子不应该大于除数的一半        if(a==s)        {            cout<<a<<endl;        }    }    system("pause");    return 0;} 

读书人网 >C++

热点推荐