Find the largest palindrome made from the product of two n-digit numbers.
Since the result could be very large, you should return the largest palindrome mod 1337.
Example:
Input: 2
Output: 987
Explanation: 99 x 91 = 9009, 9009 % 1337 = 987
Note:
The range of n is [1,8].
参考资料:here。
该解法有一个无法解释的点,就是为什么生成的回文一定是最大的?因为这种方法所生成的回文并非包括了所有回文。
class Solution {
private:
long buildPalindrome(int n) {
long left = n, right = 0;
while (n) {
right = right * 10 + n % 10;
n /= 10;
left *= 10;
}
return left + right;
}
public:
int largestPalindrome(int n) {
if (n == 1) return 9;
int top = pow(10, n) - 1, bottom = pow(10, n - 1);
for (int i = top; i >= bottom; i--) {
long panlindrome = buildPalindrome(i);
for (long j = top; j * j >= panlindrome; j--) {
if (panlindrome % j == 0) return panlindrome % 1337;
}
}
return 0;
}
};