C ++中最大的回文产品

假设我们输入了n,我们必须找到可以使用两个n位数相乘得到的最大回文。由于数字非常大,我们可以使用1337执行mod。因此,如果输入为2,则答案将为987,987 =(99 * 91)mod 1337 = 9009 mod 1337 = 987。

为了解决这个问题,我们将遵循以下步骤-

  • maxVal:= 10 ^ n – 1

  • minVal:= maxVal / 10

  • 对于初始化h:= maxVal,当h> minVal时,更新(将h减1),执行-

    • x:=左+右

    • 对于初始化i:= maxVal,当i> minVal时,更新(将i减1),执行-

    • 返回x mod 1337

    • 从循环中出来

    • 如果i <x / i,则-

    • 如果x mod i等于0,则-

    • 左:= h,右:= 0

    • 对于初始化i:= h,当i> 0时,更新right =右* 10 + i mod 10,左:=左* 10,i:= i / 10,-

    • 返回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