UVA 12050 - Palindrome Numbers(数论+规律)

来源:互联网 发布:lol登陆时显示网络异常 编辑:程序博客网 时间:2024/06/10 04:12

题目链接:12050 - Palindrome Numbers

题意:求第n个回文数是多少。
思路:在纸上写出来发现,有规律,是9个9个然后90个90个然后900个900个增加的,每个位置进一位数,知道这个后就好办了,先确定在第几位数,然后第几个,求出来即可。
代码:
#include <stdio.h>#include <string.h>int n, tab[105], tn, i, mi[105];void table() {int s = 9;for (tn = 1; ; tn++) {tab[tn] = tab[tn - 1] + s;if (tn % 2 == 0) s *= 10;if (tab[tn] == 1999999998) break;}mi[0] = 1;for (int i = 1; i <= 10; i++)mi[i] = mi[i - 1] * 10;}void f(int num) {int ans[15], ansn = 0;while (num) {ans[ansn++] = num % 10;num /= 10;}for (int i = 0; i < ansn; i++)printf("%d", ans[i]);printf("\n");}int main() {table();while (~scanf("%d", &n) && n) {for (i = 1; i <= tn; i++) {if (n <= tab[i]) break;}int num = n - tab[i - 1] + mi[(i - 1) / 2] - 1;printf("%d", num);if (i == 1) {printf("\n");continue;}if (i % 2) num /= 10;f(num);}return 0;}


0 0