53 进制转换
作者: xxx时间限制: 1S章节: 一维数组
问题描述 :
输入一个十进制数N,将它转换成R进制数输出。 输入说明 :
输入数据包含T个测试实例,每个测试实例包含两个整数N(32位整数,可为负数)和R(2<=R<=16, R<>10)。 输出说明 :
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
输入范例 : 20
-0 2 0 3 10 9 10 16 10 15 4763 9 23989 9
-1732 4 3339 5 6901 12
-1892 6 8836 11 12881 12
-21471 8 30350 7 16430 10
-24700 11 11042 14 1707 14
-20522 15 输出范例 : 0 0 11 A A 6472 35814
-123010 101324 3BB1
-12432 6703 7555
-51737 154325 16430
-17615 404A 89D
-6132
/*
T53进制转换
*/
#include<stdio.h>
#define MAX_SIZE 33
void tras(long num, int R);
int main() {
int T = 0;
long N = 0;
int R = 0;
scanf("%d", &T);
while (T--) {
scanf("%ld %d", &N, &R);
tras(N, R);
printf("\n");
}
return 0;
}
// 十进制转其他进制
void tras(long num, int R) {
char stack[MAX_SIZE];// 栈,用于存放转换后的值
int top = -1;
int temp = 0;
int negFlag = 0;// 负数标记
if (num == 0) {
printf("0");
return ;
}
if (num < 0) {
negFlag = 1;
num = -num;
}
while (num != 0) {
temp = num % R;
if (temp >= 10) {// 处理10以上进制
stack[++top] = 'A' + (temp - 10);
}
else {
stack[++top] = '0' + temp;
}
num /= R;
}
if (negFlag == 1) {
printf("-");
}
while (top != -1) {
printf("%c", stack[top--]);
}
}