1. 程式人生 > >479. 最大回文數乘積

479. 最大回文數乘積

你需要找到由兩個 n 位數的乘積組成的最大回文數。

由於結果會很大,你只需返回最大回文數 mod 1337得到的結果。

示例:

輸入: 2

輸出: 987

解釋: 99 x 91 = 9009, 9009 % 1337 = 987

說明:

n 的取值範圍為 [1,8]。
分析:直接暴力搜尋是要超時的。
先確定n位數的範圍,然後遍歷這個區間的數字。
當n>1時,兩個n位數乘積的最大回文數一定是2n位的。
所以將當前數字的前半段反轉後拼接到後面,組成一個迴文數

class Solution {
public:
    int largestPalindrome(int n) {
        int
upper = pow(10, n) - 1, lower = upper / 10; for(int i = upper; i > lower; i--) { string t = to_string(i); long p = stol(t + string(t.rbegin(), t.rend())); for(long j = upper; j * j > p; j--) { if(p % j == 0) { return p % 1337
; } } } return 9; } };