B2143 进制转换

题目描述

用递归算法将一个十进制整数 $X$($1 \le X \le 10^9$)转换成任意进制数 $M$($2\le M\le16$,$M$ 为整数)。

输入格式

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

输出格式

输出结果。

输入输出样例 #1

输入 #1

31 16

输出 #1

1F

说明/提示

样例解释

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

【题解】
如题本题采用递归形式进制转换。
前置知识:短除法。
分析:
通过短除法取余数,再将余数倒序输出即可。

对于倒序输出,可以在递归的时候,最后输出余数,这样余数就会倒序输出了。

注意,十进制下除以大于等于 10 的数会出现两位数的情况,所以需要一个字符串来转换成对应的字母。

#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;
}

Logo

集算法之大成!助力oier实现梦想!

更多推荐