2013-02-27 99 views
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

+0

你期待什么样的价值?你有什么价值? – 2013-02-27 21:49:25

回答

6

基于压痕,看来也许你需要,你忘了括号:

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

没有括号,只有cout是“在”if声明。每次执行counteri的增量。

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

+0

马克 - 当我添加括号输出停止在2.我得到了“阿姆斯特朗1号”和“阿姆斯特朗2号”的预期回应,但程序只是坐在...在第二条输出线后。 – 2013-02-27 21:58:40

+0

就是这样!谢谢! – 2013-02-27 22:03:18

+0

* Aside:* [奇怪的降价渲染!](http://meta.stackexchange.com/q/169410/147331) – Johnsyweb 2013-02-27 22:18:02

0

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

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

+0

我把它改回零,我正在试验,看看柜台问题是否是从零开始的结果。 – 2013-02-27 21:56:06

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; 
} 

您的代码不仅变得更容易阅读和理解,但你将消除许多错误rs,包括你已经在你的代码中的一个。