2017-09-02 90 views
-1

我想在C++中編寫一個函數,該函數可以識別並打印從一個位置到一個用戶指定位置的範圍內的Armstrong數字。它還會返回多少個整數。它讀取的最大數量是9,999。Armstrong號碼打印錯誤

我遇到的問題是它承認每個Armstrong數字都高達8208,但不是9474,它們都是Armstrong數字。這給我帶來了很大的困惑,因爲我根據數字的數量來處理數字,所以如果它能成功識別8208,它也應該識別9474.它不會。

這裏是我的代碼:

int isArmstrongNum(int range){ 
    int count = 0; 
    int ones; 
    int tens; 
    int hundreds; 
    int thousands; 
    if(range < 1 || range > 9999){ 
     cout << "invalid entry" << endl; 
     return 0; 
    } 
    for(int i = 1; i < range; i++){ 
     if(i < 10){ 
      if(pow(i, 1) == i){ 
       count++; 
       cout << i << endl; 
      } 
     } 
     else if(i > 9 && i < 100){ 
      ones = i % 10; 
      tens = (i - ones)/10; 
      if(pow(ones,2) + pow(tens,2) == i){ 
       count++; 
       cout << i << endl; 
      } 
     } 
     else if(i > 99 && i < 1000){ 
      ones = i % 10; 
      tens = ((i % 100) - ones)/10; 
      hundreds = (i - tens * 10 - ones)/100; 
      if(pow(ones,3) + pow(tens, 3) + pow(hundreds,3) == i){ 
       count++; 
       cout << i << endl; 
      } 
     } 
     else if(i > 999 && i < 10000){ 
      ones = i % 10; 
      tens = ((i % 100) - ones)/10; 
      hundreds = ((i % 1000) - tens*10 - ones)/100; 
      thousands = (i - hundreds * 100 - tens * 10 - ones)/1000; 
      if(pow(ones,4) + pow(tens, 4) + pow(hundreds, 4) + 
pow(thousands, 4) == i){ 
       count++; 
       cout << i << endl; 
      } 
     } 

    } 
    return count; 

}

任何想法,爲什麼它的行爲這樣?謝謝。

+0

如果你被要求找到阿姆斯特朗數字直到1000000,你還會創建那麼多的變量和條件語句嗎?我建議你應該首先概括你的程序。 – Ishpreet

+0

不要使用'pow'來整形一個整數 - 使用'x * x'。對於其他小整數冪同樣如此。 –

+0

你應該重新命名該函數,因爲它有點誤導... – pmaxim98

回答

-1

希望這有助於!

#include <iostream> 
#include <cmath> 
using namespace std; 

bool is_armstrong(int number) 
{ 
    int length=0,n=number,temp=0; 
    while(n>0) 
    { 
     length++; 
     n/=10; 
    } 
    n=number; 
    while(n>0) 
    { 
     temp+=pow(n%10,length); 
     n/=10; 
    } 
    if(temp==number) 
     return true; 
    return false; 
} 

int main() 
{ 
    int i,start_range=1,end_range=9999; 
    for(i=start_range;i<=end_range;i++) 
    { 
     if(is_armstrong(i)) 
      cout<<i<<endl; 
    } 
    return 0; 
} 

Output: 
1 
2 
3 
4 
5 
6 
7 
8 
9 
153 
370 
371 
407 
1634 
8208 
9474 
+1

請解釋*爲什麼*這段代碼會有幫助?爲什麼不同? –

+0

@ThomasMatthews由於您不必爲每個數字創建一個條件語句,比如一百或幾千個。 – Ishpreet

+1

當您發佈代碼作爲答案時,請註釋您的代碼和答案。 –