我正在编写一个计算阿姆斯壮数字的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
答案 0 :(得分:6)
根据缩进,看起来您可能需要忘记括号:
if (i == var4)
{
cout << "\n Armstrong number " << counter << ": " << var4;
counter++;
}
i++;
没有括号,只有cout
在if
语句中。每次都会执行counter
和i
的增量。
仔细观察后,我认为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位数字,它应该只有立方体。对于两位数,它应该是平方的,我不确定这个概念对单位数字是否有意义。
另外,你为什么要开一个柜台?