uva 12050 - Palindrome Numbers(数论)

来源:互联网 发布:80后和90后的区别 知乎 编辑:程序博客网 时间:2024/05/01 03:15

题目链接:uva 12050 - Palindrome Numbers


题目大意:给出i,输出第i个镜像数,不能有前导0.


解题思路:除了第一位的可能为9外,其他的都为10,这样可以根据i找到位数,然后对每一位进进计算输出。

样例:28  -> 191(边界的地方注意)


#include <stdio.h>#include <string.h>const int N = 20;int n, t[N];void solve (int bit) {int b = (bit+1)/2, ans[N];for (int i = 1; i <= b; i++) {ans[i] = n / t[b-i] + (i == 1 ? 1 : 0);n = n % t[b-i];if (n == 0 && i != b) {ans[i]--;n = t[b-i];}}ans[b]--;for (int i = 1; i <= b; i++)printf("%d", ans[i]);if (bit%2 == 0) printf("%d", ans[b]);for (int i = b - 1; i > 0; i--)printf("%d", ans[i]);printf("\n");}int main () {t[0] = 1;for (int i = 1; i <= 9; i++)t[i] = t[i-1] * 10;while (scanf("%d", &n) == 1 && n) {for (int i = 1; i; i++) {int k = t[(i-1)/2] * 9;if (k >= n) {solve (i);break;}n -= k;}}return 0;}



2 0