题解 LA2889

题目大意 多组数据,每组数据给出一个正整数 \(n\),输出第 \(n\) 大的回文数(即 \(1,2,3,\cdots\))。

分析 不难发现,\(n\) 位的回文数有 \(9*10^{\lfloor \frac{n}{2} \rfloor}\),则按此规律分类查找即可。

#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('\n');
	}
}
posted @ 2019-11-30 23:57  whx1003  阅读(114)  评论(0编辑  收藏  举报