1

アームストロング数を計算するC++クラスのプログラムを書いています。プログラムは、各出力行が次のように読み取られることを除いて、正常に動作します。

Armstrong number 1: xxx
Armstrong number 2: xxx
Armstrong number 3: xxx
Armstrong number 4: xxx, etc...

計算は正しいですが、増分番号「アームストロング番号1」、2、3などを与えるカウンターは、実際のアームストロングの結果のみを反映しています。表示された行を数えるために必要です。

コードは以下のとおりです。

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include <cmath>

using namespace std;

int main()
{
    // Change the console's background color.
    system ("color F0");

    // Declare the variables
    int i = 0, counter = 1, var1, var2, var3, var4;

    while (i < 1000)
    {
        var1 = i/100;
        var2 = (i % 100) / 10;
        var3 = (i % 100) % 10;
        var4 = (var1 * var1 * var1) + (var2 * var2 * var2) + (var3 * var3 * var3);

        if (i == var4)

            cout << "\n Armstrong number " << counter << ": " << var4;
            counter++;
            i++;


    }
        cout << "\n";
        system ("pause");
        return 0;
}

これを修正するにはどうすればよいですか?

必要なもの:アームストロング番号1:0アームストロング番号2:1アームストロング番号3:153アームストロング番号4:370

私が得るものは次のとおりです:アームストロング番号0:0アームストロング番号1:1アームストロング番号153:153アームストロング番号370:370

4

3 に答える 3

6

インデントに基づいて、忘れたブラケットが必要なようです。

   if (i == var4)
   {
        cout << "\n Armstrong number " << counter << ": " << var4;
        counter++;
   }
   i++;

角かっこがない場合は、ステートメントcoutの「中に」のみが含まれます。ifの増分counteriは毎回実行されます。

もっとよく見てみると、i++は閉じ括弧の外側にあるはずだと思います。

于 2013-02-27T21:48:47.510 に答える
1

スタイルに関するいくつかのアドバイス:

初期化/チェック/増加ループの使用for()が必要な場合は、そのために設計されてい
ます。これはCではなくC ++であり、使用する直前に変数を宣言します。
内部ステートメントを使用するように特別に設計されたインクリメント演算子。したがって、変数を1回だけ使用する場合そしてその直後にそれをインクリメントすると、あなたはそのデザインに反対します

int counter = 1;

for (int i = 0; i < 1000; i++ )
{
    int var1 = i/100;
    int var2 = (i % 100) / 10;
    int var3 = (i % 100) % 10;
    int var4 = (var1 * var1 * var1) + (var2 * var2 * var2) + (var3 * var3 * var3);

    if (i == var4)
         cout << "\n Armstrong number " << counter++ << ": " << var4;
}

コードが読みやすく理解しやすくなるだけでなく、コードにすでに含まれているエラーを含め、多くのエラーが排除されます。

于 2013-02-27T22:16:46.540 に答える
0

マークウィルキンスはあなたの重要なバグを突き止めました、しかし私はあなたがアームストロング数を正しくチェックしていないことにも注意します。3桁の数字の場合のみ3乗する必要があります。2桁の場合は二乗する必要があり、その概念が1桁の数値に適しているかどうかはわかりません。

また、なぜあなたはあなたのカウンターを一つから始めているのですか?

于 2013-02-27T21:52:01.400 に答える