2013-04-25 82 views
0

我不明白爲什麼這段代碼不起作用。它似乎沒有通過我的循環和嵌套循環。我對編程非常陌生。我一直在努力回答歐拉的練習問題。對不起,如果我的代碼是可怕的。最大的迴文3位數字C++

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

    bool isPalindrome(int x) { 
     string str = to_string(x); 

     for(string::reverse_iterator rit=str.rbegin(); rit!=str.rend(); ++rit) { 
      string pal = to_string(*rit); 
      if(pal == str) { 
       return true; 
      }else { 
       return false; 
      } 
     } 
    } 

    int main() { 
     int max[] = {0, 0}; 


     for(int i=999; i>99; i--) { 
      for(int j =999; j>99; j--) { 
      int pal = i*j; 
       if(isPalindrome(pal) == true) { 
       max[1] = pal; 
       if(max[1] > max[0]){ 
        max[0] = pal; 
        } 
       } 
      } 
     } 
     cout << max[0]; 
    } 
+0

我認爲你需要在isPalindrome比較完整的字符串後返回true。 ir return true應該在外面for循環 – 999k 2013-04-25 04:11:39

+0

我明白了你的觀點。我把外部的if循環,但它仍然沒有改變結果。它總是打印零。 – Curtis2point0 2013-04-25 04:20:07

+1

問題出在'isPalindrome'函數中。您正在錯誤地構造反轉的字符串。如果你創建一個專門用於反轉字符串的函數(我們稱之爲'reverseString'),那麼從概念上來說可能會更簡單。然後你可以用'string pal = reverseString(str);'替換'isPalindrome'中的循環。之後,您只需檢查它們是否相同並返回結果。 – 2013-04-25 04:21:10

回答

0

我想你需要在比較完整字符串後返回isPalindrome。即return true;外應for

和檢查最大的3位數字迴文爲什麼你傳遞int pal = i*j;即對第一次迭代999*999。檢查這

bool isPalindrome(int x) { 
string str = to_string(x); 
string pal = str; 
std::reverse(pal.begin(),pal.end()); 

    if(pal == str) { 
     return true; 
    }else { 
     return false; 
    } 
} 
+0

對不起,我看到標題可能不清楚的地方。我正在尋找一個迴文,它是兩個3位數字的產物。 – Curtis2point0 2013-04-25 04:31:22

+0

非常感謝,這對我幫助很大。 – Curtis2point0 2013-04-25 16:09:47

+0

樂意提供幫助。 :-)如果此答案解決了您的問題,請將其標記爲已接受 – 999k 2013-04-26 03:44:22