题目描述
给定一个十进制整数 n 和一个小整数 x。将整数 n 转为 x 进制。对于超过十进制的数码,用 A
,B
... 表示。
输入格式
第一行一个整数 n;
第二行一个整数 x。
输出格式
输出仅包含一个整数,表示答案。
输入输出样例
输入 #1
1000 2
输出 #1
1111101000
说明/提示
【数据规模和约定】
保证 n 不超过 10^9,x 不超过 36。
思路
这是一道考察进制转换的题目。
我们拿十进制转二进制举例:
取一个数 (5)10 ,将其转为二进制的步骤如下:
设所求二进制数的长为 x ( 1 为最此二进制数左端的位置, x 为最二进制数最右端的位置)。
5/2=2 余 1 , 将余数 1 作为所求二进制数的第 x 位。
2/2=1 余 0 , 将余数 00 作为所求二进制数的第 (x−1) 位。
最后剩下了一个孤单的 1 ,而 1<2 ,就不能再 1/2 了,所以将 1 作为 (5)10 第一位,先前所得的余数按照从下至上的顺序依次排好,也就是像这样:
至此,我们便求出了 (5)10=(101)2 这个结果。
那么其他进制的转换自然就能懂啦~
但是,在十进制之后,还隐藏着一个神秘的世界。
比如说在十六进制下的 15 呢?这又该如何表示?
所以,正如题目所说:对于超过十进制的数码,用 A ,B ... 表示。
那么,就有了 10=A , 11=B , ...... , 35=Z 这种说法啦。
完整代码
#include<bits/stdc++.h>
using namespace std;
int n,x;
void solve(int k) {
if(k>=x) {
solve(k/x);
k%=x;
if(k>=10) {
cout<<char(k-10+'A');
}
else {
cout<<k;
}
}
else {
if(k>=10) {
cout<<char(k-10+'A');
}
else {
cout<<k;
}
}
return;
}
int main() {
cin>>n>>x;
solve(n);
return 0;
}