使用 C++ 找出最大的迴文乘積


假設我們有輸入 n,我們必須找出使用兩個 n 位數的乘積所能產生的最大回文數。由於數字非常大,我們可以使用模 1337 進行操作。因此,如果輸入為 2,則答案將為 987,987 = (99*91) mod 1337 = 9009 mod 1337 = 987。

要解決這個問題,我們將按照以下步驟進行操作 -

  • maxVal := 10^n – 1
  • minVal := maxVal / 10
  • 對於初始化 h := maxVal,當 h > minVal,更新(h 減 1),執行 -
    • left := h,right := 0
    • 對於初始化 i := h,當 i > 0,更新 right = right * 10 + i mod 10,left := left * 10,i := i / 10,執行 -
      • x := left + right
      • 對於初始化 i := maxVal,當 i > minVal,更新(i 減 1),執行 -
        • 如果 i < x / i,則 -
          • 退出迴圈
        • 如果 x mod i 與 0 相同,則 -
          • 返回 x mod 1337
  • 返回 9

讓我們看看以下實現,以更好地理解 -

示例

 現場演示

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
   int largestPalindrome(int n) {
      int maxVal = pow(10, n) - 1;
      int minVal = maxVal / 10;
      for(int h = maxVal; h > minVal; h--){
         lli left = h;
         lli right = 0;
         for(lli i = h; i > 0; right = right * 10 + i % 10, left*= 10, i/= 10);
         lli x = left + right;
         for(int i = maxVal; i > minVal; i--){
            if(i < x / i) break;
            if(x % i == 0) return x % 1337;
         }
      }
      return 9;
   }
};
main(){
   Solution ob;
   cout << (ob.largestPalindrome(3));
}

輸入

3

輸出

123

更新時間: 01-Jun-2020

111 瀏覽次數

開啟你的 事業

完成課程後獲得認證

開始
廣告
© . All rights reserved.