注册 登录
编程论坛 C++教室

求完数的一道题,帮忙看看哪错了?

sydyh43 发布于 2009-07-23 14:31, 756 次点击
/*一个数如果恰好等于它的因子之和,
这个数就称为“完数”。例如6=1+2+3.
编程找出1000以内的所有完数。 */
//2009--7--23
#include <iostream>
using namespace std;
#define N 1000

int main()
{
    int i,n;
    int sum = 0;
     
    for(n = 2; n <= N; n++)
    {
          for(i = 1; i <= n - 1; i++)
          {
                if(n % i == 0)
                {
                     sum += i;
                }
          }
         
          if(sum == n)
          {
                 cout << n << endl;
          }
    }
    system("pause");
}
10 回复
#2
manti5202009-07-23 15:33
第一次循环语句里面加 sum = 0;
#3
ET_bug2009-07-23 15:34
你的应该放在内层,要不然会一直累加的。。。
我改过之后得到3个结果:6,28,496
#include <iostream.h>
using namespace std;
#define N 1000

int main()
{
    int i,n;
    //int sum = 0;
     
    for(n = 2; n <= N; n++)
    {
        int sum = 0;
          for(i = 1; i <= n - 1; i++)
          {
                if(n % i == 0)
                {
                     sum += i;
                }
          }
         
          if(sum == n)
          {
                 cout << n << endl;
          }
    }
    system("pause");
}
#4
ET_bug2009-07-23 15:35
呃。。。写漏了。。是int sum=0应该放在内层
#5
黯然神伤2009-07-24 23:43
同意~~~sun,没一次循环后都该清零
#6
black4232009-08-11 15:22
哈哈,这个程序我竟然能看得懂
#7
jianlingff2009-08-11 21:53
有个叫4399小游戏的网站
地址是:http://www.
里面的游戏超多啊
#8
shaozihaozi2009-08-12 19:49
头文件有问题,重复了

[ 本帖最后由 shaozihaozi 于 2009-8-12 19:53 编辑 ]
#9
zg1162009-08-12 22:07
#include <iostream>
using namespace std;
#define N 1000
 
int main()
{
    int i,n;
      
    for(n = 2; n <= N; n++)
    {
          int sum = 0;

          for(i = 1; i <= n - 1; i++)
          {
                if(n % i == 0)
                {
                     sum += i;
                }  
          }
           
          if(sum == n)
          {
                 cout << n << endl;
          }
    }
    system("pause");
}
把sum=0放到循环里面,每次执行都要清下零
#10
小小编号2009-08-12 22:14
........我原来也有这样的错误 赋值的地点放错了  sum放循环内层
#11
dicke2009-08-15 14:12
另只需要除到sqrt(n/2)
1