2013-02-27 102 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,包括你已經在你的代碼中的一個。