0

我想做的是寻找一个完美的数字。完美数是所有除数之和的数字,例如 6 = 1+2+3。

基本上我在这里做的是要求 2 个数字并在这两个数字之间找到一个完美的数字。我有一个测试可分性和 2 个嵌套循环的函数。

我的问题是我没有得到任何结果。我已经对其进行了修改,似乎找不到任何问题。编译器不会发出任何错误。

有什么问题?

#include <iostream>
using namespace std;

bool isAFactor(int, int);

int main()
{

int startval;
int endval;
int outer_loop;
int inner_loop;
int perfect_number = 0;

cout << "Enter Starting Number: ";
cin >> startval;
cout << "Enter Ending Number: ";
cin >> endval;

for(outer_loop = startval; outer_loop <= endval; outer_loop++)
{
    for(inner_loop = 1; inner_loop <= outer_loop; inner_loop++)
    {
        if (isAFactor(outer_loop, inner_loop) == true)
        {
            inner_loop += perfect_number;
        }
    }

if (perfect_number == outer_loop)
{
    cout << perfect_number << " is a perfect number." << endl;
}

else
{
    cout << "There is no perfect number." << endl;
}

}

system("PAUSE");
return 0;
}

bool isAFactor(int outer, int inner)
{
if (outer % inner == 0)
{
    return true;
}

else
{
    return false;
}
4

3 回答 3

2

inner_loop += perfect_number;应该是perfect_number += inner_loop;

还有其他问题 - 您需要在每个外部循环中重置为零,并且如果范围内的数字都不完美,perfect_number您应该打印消息,而不是为范围内不完美的每个数字打印一次。"There is no perfect number."

我建议您重命名perfect_numbersum_of_factors、和outer_loop到或类似名称。candidate_perfect_numberinner_loopcandidate_factor

于 2012-10-21T01:36:15.357 回答
0

在 if 语句之后:

cout << perfect_number;
cout << outer_loop;

if (perfect_number == outer_loop)
{
    cout << perfect_number << " is a perfect number." << endl;
}

看看他们有什么价值观

更新:

你的 endval 的价值是多少?是 0?,这就是为什么循环这么早结束的原因

于 2012-10-21T01:35:44.310 回答
0

哦,这么多问题。

  1. 变量perfect_number永远不会改变。你的编译器标记了这个吗?
  2. 外循环退出时会比结束值大一;你知道吗?
  3. 您无需将bool值与trueor进行比较false
  4. isAFactor您可以将函数简化为return (outer % inner) == 0;.
  5. 您可以将调用替换为isAFactor表达式 ((outer % inner) == 0)
于 2012-10-21T01:43:14.070 回答