2016-03-20 26 views
0

私は2つの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++ 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を変更すると、どのような意味がありましたか? –

+0

revfunc()は、数値が回文であるかどうかを判断するため、boolを返します。メインサイクルは現在のi * jが回文であるかどうかをチェックし、それが以前の既知の回文値より大きければ最終結果を更新する。 – CodeFuller

関連する問題