POJ-2402(Palindrome Numbers)

来源:互联网 发布:华星网络报销系统 编辑:程序博客网 时间:2024/05/18 01:52

【题目描述】

求第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;}


原创粉丝点击