这是怎么回事啊
刚学编程,有这么个问题:一个数如果恰好等于它的因子之和,这个数则被称为完数,例如,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);
另外楼主下次贴代码注意用代码格式。工具栏上有。
[解决办法]
#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;}