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
#include <stdio.h>
#include <windows.h>
char set[16] = {'0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', 'A', 'B', 'C'};
int main() {
int decimal, base, result[1007];
while (scanf("%d%d", &decimal, &base) != EOF) {
if (decimal < 0) {
printf("-");
decimal = -decimal;
}
int cnt = 0;
while (decimal) {
result[cnt++] = decimal % base;
decimal = decimal / base;
}
for (int i = cnt - 1; i >= 0; i--) {
printf("%c", set[result[i]]);
}
printf("\n");
}
system("pause");
return 0;
}
任意->10进制的补充代码
int charTransfromToInt(char a){
return a>='A' && a<='Z'? a-'A' + 10: a-'0';
}
// 任意进制到十进制
// 待转换字符串 字符串个数 进制
int toDecmalDigits(char s[], int n, int base) {
int res = 0;
int tmp = 1;
for (int i = n - 1; i >= 0; i--) {
res += charTransfromToInt(s[i]) * tmp;
tmp = tmp * base;
}
return res;
}