[GESP样题 三级] 进制转换
题目描述
小美刚刚学习了十六进制,她觉得很有趣,想到是不是还有更大的进制呢?在十六进制中,用 A
表示 $10$、F
表示 $15$。如果扩展到用 Z
表示 $35$,岂不是可以表示 $36$ 进制数了嘛!
所以,你需要帮助她写一个程序,完成十进制转 $R$ 进制($2\le R\le 36$)的工作。
输入格式
输入两行,第一行包含一个正整数 $N$,第二行包含一个正整数 $R$,保证 $1\le N\le 10 ^ 6$。
输出格式
输出一行,为 $N$ 的 $R$ 进制表示。
样例 #1
样例输入 #1
123
25
样例输出 #1
4N
#include <iostream>
using namespace std;
// 函数:将单个数字转换为对应字符
void zhuanhuan(int n) {
if (n >= 10) {
// 对于 10 及以上的值,转换为对应的字母(A = 10,B = 11,等等)
char b = n + 55;
cout << b;
}
else {
// 对于小于 10 的值,直接输出数字
cout << n;
}
}
// 函数:将数字 n 转换为 b 进制
void jinzhi(int n, int b) {
if (n / b == 0) {
// 基本情况:当 n 小于 b 时,转换并输出余数
zhuanhuan(n % b);
return;
}
// 递归情况:先处理高位数字
jinzhi(n / b, b);
// 转换并输出当前位数字
zhuanhuan(n % b);
}
int main() {
int n, b;
// 从用户输入读取整数和进制
cin >> n >> b;
// 将数字转换为指定进制并输出结果
jinzhi(n, b);
return 0;
}
