479. 最大回文数乘积
你需要找到由两个 n 位数的乘积组成的最大回文数。
由于结果会很大,你只需返回最大回文数 mod 1337得到的结果。
示例:
输入: 2
输出: 987
解释: 99 x 91 = 9009, 9009 % 1337 = 987
说明:
n 的取值范围为 [1,8]。
分析:算出n位数的最大值和最小值。n位数乘n位数的最长回文数必定是2n位。所以可以将n位数最大值和最小值之间的数倒置后拼接在后面,形成2n位数。再判断该数能否整除最大值和最小值之间的数即可。要注意的是判断j*j>m时j要用long型否则会溢出。
class Solution {
public:
int largestPalindrome(int n) {
int top=pow(10,n)-1;
int bot=top/10;
for(int i=top;i>bot;i--)
{
string s=to_string(i);
long m=stol(s+string(s.rbegin(),s.rend()));
for(long j=top;j*j>m;j--)
{
if(m%j==0) return m%1337;
}
}
return 9;
}
};