题目描述

用递归算法将一个十进制数 XX 转换成任意进制数 M(M≤16)。

输入格式

一行两个数,第一个十进制数 X,第二个为进制 M。

输出格式

输出结果。

输入输出样例

输入

31 16 

输出

1F

说明/提示

样例解释

将十进制 31 转化为十六进制数。

如题本题采用递归形式进制转换。

前置知识:短除法

分析:

  • 通过短除法取余数,再将余数倒序输出即可。
  • 对于倒序输出,可以在递归的时候,最后输出余数,这样余数就会倒序输出了。
  • 注意,十进制下除以大于等于 1010 的数会出现两位数的情况,所以需要一个字符串来转换成对应的字母
#include<bits/stdc++.h>
#define ll long long
using namespace std;
string c = "0123456798ABCDEF";  //对应字符。

void f(int x,int m) {
    if(x/m) f(x/m,m);  //继续递归。
    cout << c[x%m];  //倒序输出。
}

int main() {
    int x, m;
    cin >> x >> m;  //输入。
    f(x,m);  //递归。
    return 0;
}
Last modification:August 7, 2021
如果觉得我的文章对你有用,请随意赞赏