进制转换
题目描述
用递归算法将一个十进制数 X X X 转换成任意进制数 M M M( M ≤ 16 M\le16 M≤16)。
输入格式
一行两个数,第一个十进制数 X X X,第二个为进制 M M M。
输出格式
输出结果。
样例 #1
样例输入 #1
31 16
样例输出 #1
1F
提示
样例解释。
将十进制 31 31 31 转化为十六进制数。
思路
采用短除法,并将余数倒序输出
代码
#include<stdio.h>
#define N 100
char A[16] = { '0', '1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
// 用短除法
int help_func(char* res, int index, int num, int change)
{
if (num > 0) {
res[index] = A[num % change];
return help_func(res, index + 1, num / change, change) + 1;
}
else
return 0;
}
int main()
{
char res[N] = {'\0'};
int x, m; // x是十进制数,m是待转化的进制
scanf("%d %d", &x, &m);
int i = help_func(res,0, x, m);
while(res[i]=='\0'|| res[i] == A[0])
i--;
for (; i > -1; i--)
printf("%c", res[i]);
return 0;
}
题目链接
链接: 洛谷B2143