第K回文数
时间限制(普通/Java) :
1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 800 测试通过 : 219
总提交 : 800 测试通过 : 219
比赛描述
回文数是这样一个正整数:它从左往右读和从右往左读是一样的。例如1,111,121,505都是回文数。将1到100,000,000内所有回文数按从小到达排序后,第k个回文数是多少呢?
输入
第一行为一个整数N,表示询问的次数。以下N行每行一个整数k,表示询问第k个回文数是多少。
输出
输出共N行,按照输入数据的顺序,依次输出第k个回文数。
样例输入
2
5
10
样例输出
5
11
题目来源
NUAA
#include<iostream>
using namespace std;
int main(){
long k,i,N;
long a[10]={1,9,18,108,198,1098,1998,10998,19998,109998};
cin>>N;
while(N--){
cin>>k;
for(i=0;k>a[i];++i); //第k个回文数是i位数
switch(i){
case 8: case 9:
k -= 9000;
case 6: case 7:
k -= 900;
case 4: case 5:
k -= 90;
case 2: case 3:
k -= 9;
}
cout<<k;
if(i&1) k/=10;
while(k){
cout<<k%10;
k /= 10;
}
cout<<endl;
}
}