题目
把一个整数转换为任意进制(进制小于65, 为什么是36呢, 因为有26个英文字母, 外加0, 1, 2,… 9)
解题思路
我们首先必须知道进制转化的方法是除基取余, 就是反复的除以进制数, 然后用商作为基数, 继续除以进制数, 直到商为0. 然后逆序的余数就是结果。
举个栗子:
- 111 转化为8进制, 111 / 8 = 13 余 7, 也就是111 包含13个整8, 外加一个余数7. 那么很自然的, 7 就是最低位了。
- 13 / 8 = 1 余 5. 也就是对13 来说有一个 整8, 外加余数 5. 5就是当前数的最低位了。
- 1/ 8 = 0 余 1. 也就是对1 来说有0个 整8, 外加余数 1. 1就是当前数的最低位了
代码实现
#include<stdio.h>
#include<stdlib.h>
void translate(int n, int radix) {
int temp;
if (n) {
translate(n / radix, radix);
temp = n % radix;
if (temp < 10) {
printf("%d", temp);
}
else {
printf("%c", temp - 10 + 'A');
}
}
}
int main()
{
int a;
scanf("%d", &a);
int b;
scanf("%d", &b);
translate(a, b);
return 0;