您的位置:首页 > 其它

uva 12050 - Palindrome Numbers(数论)

2014-04-11 09:18 477 查看
题目链接: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
;

void solve (int bit) {
int b = (bit+1)/2, ans
;

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