题目链接: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; }
uva 12050 - Palindrome Numbers(数论),布布扣,bubuko.com
uva 12050 - Palindrome Numbers(数论)
原文:http://blog.csdn.net/keshuai19940722/article/details/23422081