输入十进制整数N和待转换的进制x(2、8、16),分别代表十进制N转换成二进制、八进制和十六进制,输出对应的结果。十六进制中

A~F用大写字母表示。

输入格式:

输入两个整数N(十进制整数N)和x(x进制),中间用空格隔开。

输出格式:

输出对应的结果。

输入样例:

1
123 2

输出样例:

1
1111011

输入样例:

1
123 16

输出样例:

1
7B

思路

我们知道10进制数转x进制数的方法是利用短除法,每次去除以x,得到一个个余数,最后按得到的顺序,倒着输出每个余数就完事了。显然正着得到,倒着输出正好符合栈的特性–后进先出,因此我们只需要把得到的余数push到栈里,最后一个个pop出栈输出即可。需要注意的是,输出的时候,16进制的10-15要替换成A-F。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <bits/stdc++.h>

using namespace std;

const string radix_16="0123456789ABCDEF";//可定义一个用于16进制数替换的字符串,这样在输出的时候原来的数就是下标,然后利用下标就可以找到对应的替换后的数输出了

int main()
{
int N,x;
cin>>N>>x;
stack<int> s;
while(N)
{
s.push(N%x);
N=N/x;
}
/*
//本题输出八进制数时最前面加不加这个0都是可以过的
if(x==8)
{
printf(0);
}
*/
while(!s.empty())
{
if(x==2||x==8)
{
printf("%d",s.top());
}
else//对16进制数特别照顾一下
{
printf("%c",radix_16[s.top()]);
}
s.pop();
}
}