@[TOC](HDUOJ 2031进制转换)

HDUOJ 2031进制转换


Problem Description
输入一个十进制数N,将它转换成R进制数输出。

Input
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。

Output
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。

Sample Input
7 2
23 12
-4 3

Sample Output
111
1B
-11

弄清楚进制转换的方法就可以解决这道问题了,以第一个样例做例子,使用除几取余法,
7 2
7%2=1;
7/2=3;
3%2=1;
3/2=1;
1%2=1;
1/2=0;
然后把余数的结果从后往前排在一起就是结果111。
另外还需要注意的一点是大于十进制的数需要用字母输出。

Submit

#include<stdio.h>
#include<math.h>
int main() {
	int n, r, a[100], s, i;
	while (~scanf("%d %d", &n, &r)) {
		s = n, n = fabs(n), i = 0;
		while (n) {
			a[i] = n % r;
			i++;
			n = n / r;
		}
		for (i = i - 1; i >= 0; i--) {
			if (s < 0) {
				printf("-");
				s = 0;
			}
			if (a[i] < 10) {
				printf("%d", a[i]);
			}
			if (a[i] >= 10) {
				printf("%X", a[i]);
			}
		}
		printf("\n");
	}
	return 0; 
}
上一篇:2021-02-09


下一篇:MCM思路