2016-01-20 55 views
0

寫了下面的代碼,但只能當第一個數字是對稱的:計數多少次輸入的號碼,直到第一對稱數字輸入

對稱性是這樣的數字:4554(從兩端閱讀是一樣的號碼)

我的問題是爲什麼突破只適用於第一個號碼?它發生在我運行它時。

#include <iostream> 

using namespace std; 

int main() 
{ 
    int n=0, z=0, r=0, x=0, m; 
    for (;;) { 
     cout << "Enter number: "; 
     cin >> x; 
     m = x; 

     while(x!=0) { 
      r = x % 10; 
      z = z * 10 + r; 
      x = x/10; 
     } 
     if(m==z) 
      break; 
     else 
      n++; 
    } 
    cout << n; 
    return 0; 
} 
+1

幹得好,代碼不錯.....其實你的問題是什麼? – jpo38

+0

知道這個問題會很酷。 – SergeyA

回答

2

Move int z = 0,r = 0;內部for循環。

+2

不需要'r'。 – SergeyA

+0

哦對,z每次需要爲0,謝謝! –

0

爲什麼不使用此代碼來知道數字是否是對稱的?

#include <iostream> 
#include <sstream> 
#include <string> 

using namespace std; 

int main() 
{ 
    int x; 
    for (;;) { 
     cout << "Enter number: "; 
     cin >> x; 
     m = x; 

     std::stringstream str; 
     str << x; 

     std::string number = str.str(); 
     if (number == std::string(number.rbegin(), number.rend()) 
      break; 
     else 
      n++; 
    } 
    cout << n; 
    return 0; 
} 

簡單,導致了同樣的結果,是肯定更容易出錯;-)

+0

該死的看起來很複雜xD。我沒有學過字符串或任何東西.. –

+0

這很可能是一個任務。 – SergeyA

+0

@SergeyA:當然......但這並不意味着你必須操縱數字(除非OP發佈了賦值約束....)。它看起來更優雅,而且更容易理解代碼的作用.....老師肯定會對答案感到驚訝,但可以接受它;-) – jpo38

0

這本來是更容易理由,如果你這樣寫的:

#include <iostream> 

bool isPalindrome(int x) 
{ 
    int y = x; 
    int z; 
    while (x) { 
     z = z * 10 + x % 10; 
     x /= 10; 
    } 
    return y == z; 
} 

int main() 
{ 
    int n = 0; 
    int x; 
    for (;;) { 
     std::cout << "Enter number: "; 
     std::cin >> x; 
     if (isPalindrome(x)) 
      break; 
     else 
      ++n; 
    } 
    std::out << "Number of non-palindromes: " << n << std::endl; 

    return 0; 
} 

有意義的名字功能總是有幫助!

相關問題