按由小到大顺序枚举长度不超过2*i的回文串。
using ll = long long;
void fun() {
vector<ll> v;
// 回文半径为i,可得长度为2*i-1,2*i的回文串。
for (ll i=1; i<=1e3; i*=10) { //1e3回文半径=4, 得到[1, 99,999,999]内回文整数
// 奇数长度回文
for (ll j=i; j<i*10; j++) {
ll a = j, b = j/10;
while (b) {
a = a*10+b%10;
b /= 10;
}
v.push_back(a);
}
// 偶数长度回文
for (ll j=i; j<i*10; j++) {
ll a = j, b = j;
while (b) {
a = a*10+b%10;
b /= 10;
}
v.push_back(a);
}
}
for (ll i:v) {
cout << i << endl;
}
}
判断k进制下x是否回文
bool ok(ll x, int k) {
ll y = 0, p = x;
while (x) {
y = y*k + x%k;
x /= k;
}
return p == y;
}