#L0319. 进制转换

进制转换

当前没有测试数据。

题目背景

在算法竞赛的初期训练中,理解函数调用栈和“递推与回归”的过程是至关重要的一步。本题特别为想要巩固基础的选手准备,请尝试抛弃常见的循环结构,用纯递归的方式来解决这个经典的进制转换问题吧!^_^

题目描述

给定一个十进制非负整数 NN 和一个目标进制 KK,请编写一个递归函数,将 NN 转换为 KK 进制数并输出。

注意:当 KK > 10 时,超出 9 的部分请使用大写英文字母 AAFF 来分别表示数值 10 到 15(即 AA 代表 10,BB 代表 11,以此类推)。

输入格式

一行,包含两个用空格分隔的整数 NNKK。 满足 0N1090\leq N\leq 10^9 , 2K162\leq K\leq 16

输出格式

一行,包含一个字符串,表示 NN 转换后的 KK 进制数。

样例

233 8
351
45 16
2D
0 2
0

样例解释

对于样例 1:十进制数 233 转换为 8 进制。递归的核心思想在于先不断整除缩小规模,然后在递归返回时(即回溯阶段)打印余数。过程类似于:先处理 233 / 8 = 29,再处理 29 / 8 = 3,最后处理 3 / 8 = 0(到达递归边界)。在递归层层返回时依次输出余数 3、5、1,从而利用函数调用栈自动实现了逆序输出,得到最终结果 351。

对于样例 2:十进制数 45 转换为 16 进制。第一层递归余数为 13(对应字符为 D),商为 2;下一层商为 0,余数为 2。逆序输出即为 2D。

对于样例 3:特别注意数字为 0 时的边界特判。