首页 > 其他 > 详细

uva 12050 - Palindrome Numbers(数论)

时间:2014-04-11 13:19:25      阅读:521      评论:0      收藏:0      [点我收藏+]

题目链接: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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!