东华oj-基础题第53题

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--]);
	}
} 
发布了34 篇原创文章 · 获赞 6 · 访问量 6114

猜你喜欢

转载自blog.csdn.net/qq_41409120/article/details/104072079