C ++中最大的回文产品
假设我们输入了n,我们必须找到可以使用两个n位数相乘得到的最大回文。由于数字非常大,我们可以使用1337执行mod。因此,如果输入为2,则答案将为987,987=(99*91)mod1337=9009mod1337=987。
为了解决这个问题,我们将遵循以下步骤-
maxVal:=10^n–1
minVal:=maxVal/10
对于初始化h:=maxVal,当h>minVal时,更新(将h减1),执行-
x:=左+右
对于初始化i:=maxVal,当i>minVal时,更新(将i减1),执行-
返回xmod1337
从循环中出来
如果i<x/i,则-
如果xmodi等于0,则-
左:=h,右:=0
对于初始化i:=h,当i>0时,更新right=右*10+imod10,左:=左*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