The largest n-digit palindrome is formed by filling the highest possible digits from the outside in. To find the largest k-palindromic number, generate palindromes from largest to smallest and check divisibility by k. For efficiency, construct only valid palindromes and check divisibility.
classSolution {
public: string largestPalindromic(int n, int k) {
int half = (n +1) /2;
longlong start = pow(10, half -1), end = pow(10, half) -1;
for (longlong i = end; i >= start; --i) {
string s = to_string(i);
string rev = s.substr(0, n /2);
reverse(rev.begin(), rev.end());
string pal = s + rev;
longlong num = stoll(pal);
if (num % k ==0) return pal;
}
return"";
}
};
classSolution {
public String largestPalindromic(int n, int k) {
int half = (n + 1) / 2;
int start = (int)Math.pow(10, half - 1), end = (int)Math.pow(10, half) - 1;
for (int i = end; i >= start; i--) {
String s = Integer.toString(i);
String rev =new StringBuilder(s.substring(0, n / 2)).reverse().toString();
String pal = s + rev;
if (new java.math.BigInteger(pal).mod(java.math.BigInteger.valueOf(k)).equals(java.math.BigInteger.ZERO))
return pal;
}
return"";
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classSolution {
funlargestPalindromic(n: Int, k: Int): String {
val half = (n + 1) / 2val start = Math.pow(10.0, (half - 1).toDouble()).toInt()
val end = Math.pow(10.0, half.toDouble()).toInt() - 1for (i in end downTo start) {
val s = i.toString()
val rev = s.substring(0, n / 2).reversed()
val pal = s + rev
if (pal.toBigInteger().mod(k.toBigInteger()) ==0.toBigInteger())
return pal
}
return"" }
}
1
2
3
4
5
6
7
8
9
10
11
deflargest_palindromic(n: int, k: int) -> str:
half = (n +1) //2 start =10** (half -1)
end =10** half -1for i in range(end, start -1, -1):
s = str(i)
rev = s[:n //2][::-1]
pal = s + rev
if int(pal) % k ==0:
return pal
return""
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
impl Solution {
pubfnlargest_palindromic(n: i32, k: i32) -> String {
let half = (n +1) /2;
let start =10_i64.pow((half -1) asu32);
let end =10_i64.pow(half asu32) -1;
for i in (start..=end).rev() {
let s = i.to_string();
let rev: String = s.chars().take((n /2) asusize).rev().collect();
let pal =format!("{}{}", s, rev);
let num = pal.parse::<i64>().unwrap();
if num % (k asi64) ==0 {
return pal;
}
}
String::new()
}
}