题目编号 :Exp06-Enhance05,freshman-1022
题目名称:十进制转换任意进制
题目描述:编写程序,用递归方法将十进制的正整数 N 转换为 b 进制数(2≤b≤36),其中字符、ASCII码值和数值之间的对应关系如下:
输入:一行输入两个非负整数,分别是十进制的 N 和 b ,其中 0 <=N <=2^31 ,2 <=b <= 36 。
输出:N 的 b 进制数。
样例1:
输入: 579 8
输出: 1103
样例2:
输入: 579 20
输出: 18J
#include <stdio.h>
void transform(long long x, long long n);
int cnt = 0;
char a[32];
int main() {
long long x, n; //将十进制的数x转化为n进制数
scanf_s("%lld %lld", &x, &n); //x范围较大,用lld
if (x == 0) //当x=0时,执行函数,直接返回,数组a为空,最终输出为空
printf("%lld", x);
else {
transform(x, n);
cnt--;
int i;
for (i = cnt; i >= 0; i--) {
printf("%c", a[i]);
}
}
return 0;
}
void transform(long long x, long long n) {
if (x == 0) //出口为被除数为零时,此处要确保将最后一个余数存放进数组,在本函数中商为零、余数放入数组后再次调用函数,0做被除数,返回
return;
else {
if (x % n <= 9 && x % n >= 0) //注意数字向字符的转化,0-9与两位数转化成字符是不同的
a[cnt++] = x % n + 48;
else
a[cnt++] = x % n + 55;
transform(x / n, n);
}
}