您的位置:首页 > 其它

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

2014-04-13 12:52 381 查看


题目链接: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: