反不给出预期的结果

时间:2013-02-27 21:46:57

标签: c++

我正在编写一个计算阿姆斯壮数字的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

3 个答案:

答案 0 :(得分:6)

根据缩进,看起来您可能需要忘记括号:

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

没有括号,只有coutif语句中。每次都会执行counteri的增量。

仔细观察后,我认为i++应该在结束时间之外。

答案 1 :(得分:1)

关于风格的一些建议:

如果你需要为()初始化/检查/增加循环使用,它是为那个设计的 这是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;
}

您的代码不仅变得更易读,而且更容易理解,但您将消除许多错误,包括您的代码中已有的错误。

答案 2 :(得分:0)

Mark Wilkins已经确定了你的关键错误,但我也注意到你没有正确检查阿姆斯特朗号码。对于3位数字,它应该只有立方体。对于两位数,它应该是平方的,我不确定这个概念对单位数字是否有意义。

另外,你为什么要开一个柜台?