Tìm palindrome (đối xứng) có đúng K chữ số, là số thứ N trong dãy tăng dần.
Ý tưởng: Palindrome K chữ số xác định bởi nửa đầu.
- K chẵn: nửa đầu có K/2 chữ số.
- K lẻ: nửa đầu có K/2 + 1 chữ số (chữ số giữa dùng chung).
Nửa đầu bắt đầu từ 10^(len-1). Số thứ N có nửa đầu = 10^(len-1) + N - 1.
Triển khai C++
#include <bits/stdc++.h>
using namespace std;
void nthPalindrome(int n, int k) {
int halfLen = (k + 1) / 2;
int start = pow(10, halfLen - 1);
int firstHalf = start + n - 1;
string s = to_string(firstHalf);
string rev = s;
reverse(rev.begin(), rev.end());
if (k % 2 == 1) rev = rev.substr(1); // bỏ chữ số giữa
cout << s << rev << endl;
}
int main() {
nthPalindrome(7, 8); // 10066001
return 0;
}
Kết quả
10066001