题目
思路
一个n位数的范围在10^(n-1)到10^n-1之间,两个n位数的乘积的位数是2n或2n-1位。除了n=1以外,最大回文整数的位数都是2n位。从大到小枚举每一个可能的回文整数,判断它是否能用两个n位数的乘积来表示。回文整数可以通过前半段确定,前半段就是n位数,范围在10^(n-1)到10^n-1之间。通过前半段得出完整的回文整数,再判断它余从10^n-1到sqrt(它本身)的数能否为0.
代码
class Solution {
public:
int largestPalindrome(int n) {
if(n == 1) return 9;
int max = pow(10, n) - 1;
for(int i = max; ; i--){
long num = i;
for(int t = i; t > 0; t /= 10){
num = num * 10 + t % 10;
}
for(long j = max; j * j > num; j--){
if(num % j == 0) return num % 1337;
}
}
return -1;
}
};