首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新人求解,该如何处理

2012-05-11 
新人求解刚学编程,有这么个问题:一个数如果恰好等于它的因子之和,这个数则被称为完数,例如,6的因子为1,2,3

新人求解
刚学编程,有这么个问题:一个数如果恰好等于它的因子之和,这个数则被称为完数,例如,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;
}
调试是好的,就是出来的不是完数,大哥们帮帮忙看下是怎么回事啊、、

[解决办法]
楼主的思路是对的,只是用错了判断符。
逻辑上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 a,b,s;
 for(a=1;a<=1000;a++)
 {
 b=1;
 s=0;
while(b<a)
{
if(a%b==0)s=s+b;
b=b+1;
}

 if(a==s)cout<<a<<endl;
 }

 return 0;
}

1、if(a=s)错了,用"=="
2、s在每次循环中都要重新赋值为0,否则上个循环的s会遗留下来
3、根据题目,b是小于a的,是b<a,而不是b<=a

热点排行