题目大意 多组数据,每组数据给出一个正整数 (n),输出第 (n) 大的回文数(即 (1,2,3,cdots))。
分析 不难发现,(n) 位的回文数有 (9*10^{lfloor frac{n}{2} floor}),则按此规律分类查找即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
int len, a[15];
bool flag = 1;
int main()
{
while(~scanf("%lld", &n) && n) {
flag = 1, len = 0;
ll base = 9;
while(n > base) {
n -= base, flag ^= 1;
if(flag) base *= 10ll;
}
base /= 9, n += base - 1;
while(n) {
a[++len] = n % 10;
n /= 10;
}
for(int i = len; i >= 1; --i)
printf("%d", a[i]);
for(int i = flag + 1; i <= len; ++i)
printf("%d", a[i]);
putchar('
');
}
}