PTA 7-239 进制转换
将十进制整数n(−2^31<n<2^31)转换成k(2≤k≤16)进制数。注意,10~15分别用字母A、B、C、D、E、F表示。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据输入两个整数n和k。
输出格式:
对于每组测试,先输出n,然后输出一个空格,最后输出对应的k进制数。
输入样例:
4
5 3
123 16
0 5
-12 2
输出样例:
5 12
123 7B
0 0
-12 -1100
/*
负数的任意进制为负数
0的任意进制为0
*/
#include <stdio.h>
// 将十进制整数n转换为k进制数
void decimalToBase(int n, int k) {
// 如果n为负数,则输出负号并将n取绝对值
if (n < 0) {
printf("-");
n = -n;
}
if(n == 0)
{
printf("0");
return;
}
// 用数组存储k进制数的各个位
char result[50];
int i = 0;
// 将n转换为k进制数,并存储在result数组中
while (n > 0) {
int remainder = n % k;
if (remainder < 10) {
result[i] = remainder + '0'; // 转换为字符形式
} else {
result[i] = remainder - 10 + 'A'; // 转换为A-F表示的字符
}
n = n / k;
i++;
}
// 倒序输出result数组中的字符,得到最终的k进制数
for (int j = i - 1; j >= 0; j--) {
printf("%c", result[j]);
}
}
int main() {
int T;
scanf("%d", &T); // 输入测试数据组数
while(T--) {
int n, k;
scanf("%d %d", &n, &k); // 输入整数n和进制k
printf("%d ",n);
decimalToBase(n, k); // 调用函数进行转换并输出结果
printf("\n");
}
return 0;
}