十进制转换任意进制(递归)

题目编号 :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);
	}
}

上一篇:[模板] 类欧几里得算法


下一篇:1015. 摘花生