【题目描述】
求第n个回文数
【解题思路】
首先求出一共k位长的数一共多少个回文,然后对半开
/* list[i]表示位数为i的满足回文数要求共有list[i]个 */
ll List[20] = {0, 9, 9, 90, 90, 900, 900, 9000, 9000, 90000, 90000, 900000, 900000, 9000000, 9000000, 90000000,
90000000, 900000000, 900000000, 9000000000};
int main()
{
ll n, sum;
int i;
while (cin>>n && n) {
sum = 0;
for (i = 1; i <= 19; ++i) {/* i表示位数 */
if (sum + List[i] >= n)//i表示位数
break;
sum += List[i];
}
string str(i, '0');
str[0] = str[i - 1] = '1';
n = n - sum - 1;
if (i == 1) {
str[0] += n;
} else {
int index = -1, s = (int)pow(10.0, (i - 2) / 2 + (i - 2) % 2);
for ( ; s >= 1 && n != 0 ;s /= 10) {
index++;
if (n < s)
continue;
str[index] += n / s;/* 不能写成=n/s,因为最外层的str[0],str[i-1]起始值是1 */
str[i - 1 - index] = str[index];
n %= s;
}
}
cout<<str<<endl;
}
return 0;
}