巨兔12138 发表于 2020-6-20 20:11:14

for循环后无输出结果

/*
一个数恰好等于它的因子之和,这个数就叫完数
*/

#include<iostream>
#include<iomanip>

using namespace std;

int main()
{
        int i, n,sum, amount = 0;
        for (i = 1; i < 1000; i++)
        {
                sum = 0;
                for (n = 1; n <= i; n++)
                {
                        if (i % n == 0)
                        {
                                sum += n;
                                amount++;
                        }
                }

                if (sum == i)
                        cout << setw(5) << i;
                if (amount % 5 == 0)
                        cout << endl;
        }
        cout << "1000以内总共有" << amount << "个完数";
        return 0;
}
这是一个寻找1000以内的完数的代码
完数的解释在注释中给出
但是运行代码最后什么都没输出出来
大神们能给看看问题出在哪了吗

405794672 发表于 2020-6-21 09:04:13

以下我复制你的代码的运行结果。说明你代码有严重问题,而且你不出结果是你的电脑运行太慢,你没耐心等待的结果:

巴巴鲁 发表于 2020-6-21 11:53:56

我学的C,只能看你循环那里的代码了
完数的概念为除以自身外恰好等于它的因子之和,这个数就叫完数
所以把第16的=去掉就行

南七 发表于 2020-6-22 09:23:18

本帖最后由 南七 于 2020-6-22 09:27 编辑

那个amount++的位置不对,得在内层循环下面写个if(sum==1){amount++},然后就是16行那个n<=i改成n<i或者n<=i/2,最后个人认为if (sum == i)和if (amount % 5 == 0)这俩没有啥必要写诶。新号比较捞没法上传图片,不然可以直接带图,这样看得去更清晰点,代码如下,楼主可以运行一下康康。
#include<iostream>
#include<iomanip>

using namespace std;

int main()
{
      int i, n,sum, amount = 0;
      for (i = 1; i < 1000; i++)
      {
                sum = 0;
                for (n = 1; n < i/* n <= i/2 */; n++)
                {
                        if (i % n == 0)
                        {
                              sum += n;
                        }
                }
                if(sum==i)
                {
                  amount++;
                  cout<< i << endl;
                }

                /* if (sum == i)
                        cout << setw(5) << i;
                if (amount % 5 == 0)
                        cout << endl; */
                        
      }
      cout << "1000以内总共有" << amount << "个完数";
      system("pause");
      return 0;
}
}
页: [1]
查看完整版本: for循环后无输出结果