2016-03-20 88 views
0

我寫了一個代碼來找到由兩個3位數字相乘形成的最大回文。然而,不是隻得到所需的答案,即最大的迴文,我得到所有可能的迴文列表。我如何編程才能找到最大的。 代碼:查找給定輸出的最大值

#include <iostream> 

using namespace std; 

int revfunc(int x) { 
    int rev = 0, num, d; 
    num = x; 
    while(num != 0) { 
     d = num % 10; 
     rev = (rev * 10) + d; 
     num = num/10; 
    } 
    long int maxi = 0; 
    if(x == rev && maxi < x) { 
     maxi=x; 
     cout<<maxi<<endl; 
    } 
} 

int main() { 
    long int ans; 
    for(int i = 100; i <= 999; i++) { 
     for(int j = 100; j <= 999; j++) { 
      ans = i * j; 
      revfunc(ans); 
     } 
    } 

    cin.get(); 
    return 0; 
} 
+2

爲什麼標記爲「C」?這是'C++'。還要注意'C'和'C++'之間有很大的區別。你不需要標記這個「C++」,「C++ 11」,「C++ 14」。只要選擇其中之一。 –

+0

好的。謝謝。請牢記這一點。 –

+0

也感謝martijnn2008。我今天學到了什麼好的演講來自你! –

回答

1

在程序中,你實際上並沒有選擇最高的迴文,你只是把它們扔掉所有。這裏是代碼工作的最小修正:

bool revfunc(int x){ 
    int rev = 0, num, d; 
    num = x; 
    while (num != 0){ 
     d = num % 10; 
     rev = (rev * 10) + d; 
     num = num/10; 
    } 
    long int maxi = 0; 
    return x == rev&&maxi < x; 
} 

int main() 
{ 
    int max_palindrome = 0; 
    long int ans; 
    for (int i = 100; i <= 999; i++){ 
     for (int j = 100; j <= 999; j++){ 
      ans = i*j; 
      if (ans > max_palindrome && revfunc(ans)) 
      { 
       max_palindrome = ans; 
      } 
     } 
    } 

    cout << max_palindrome; 

    cin.get(); 
    return 0; 
} 
+0

非常感謝@CodeFuller。如果可能的話,你可以讓我穿過它嗎?將int變爲bool有什麼意義? –

+0

revfunc()現在確定數字是否是迴文,這就是爲什麼它返回布爾值。然後主循環檢查當前的i * j是否是迴文,如果它大於先前已知的迴文值,則更新最終結果。 – CodeFuller