0

私がやろうとしているのは、完全数を探すことです。完全数とは、6 = 1 + 2 + 3など、すべての除数の合計である数です。

基本的に私がここで行うことは、2つの数を求め、それら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;

他にも問題があります。外側の各ループでゼロにリセットする必要があります。範囲内の数値が完全でない場合は、範囲内の数値ごとに1回印刷するのではなく、perfect_numberおそらくメッセージを出力する必要があります。"There is no perfect number."

perfect_number名前を、、to sum_of_factorsouter_loopto candidate_perfect_number、または同様のものinner_loopに変更することをお勧めします。candidate_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. 外側のループは、終了時に終了値より1つ多くなります。あなたはこれを知っていましたか?
  3. bool値をtrueまたはと比較する必要はありませんfalse
  4. isAFactor関数をに簡略化できreturn (outer % inner) == 0;ます。
  5. isAFactortoの呼び出しを式 に置き換えることができます((outer % inner) == 0)
于 2012-10-21T01:43:14.070 に答える