1

我正在为计算 Armstrong 数字的 C++ 类编写程序。该程序工作正常,除了每个输出行应该读为:

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

计算是正确的,但给出增量数字“Armstrong number 1”、2、3 等的计数器仅反映实际的 armstrong 结果。我需要它来计算显示的行数。

代码如下。

#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语句中。counter和的增量i每次都会执行。

仔细观察后,我相信i++应该在右括号之外。

于 2013-02-27T21:48:47.510 回答
1

关于风格的一些建议:

如果您需要初始化/检查/增加循环,请使用 for(),它是为此而设计的
这是 C++,而不是 C,请在使用变量之前声明您的变量
专门设计用于内部语句的增量运算符,因此如果您只使用一次变量在增加它之后,你就违背了那个设计

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

Mark Wilkins 已经解决了您的关键错误,但我还要注意您没有正确检查 Armstrong 数字。它只能用于 3 位数字的立方。对于两位数,它应该是平方的,我不确定这个概念对个位数是否有意义。

另外,为什么你的柜台从一个开始?

于 2013-02-27T21:52:01.400 回答