求任意两个不同进制非负整数的转换( 2 2 2 进制 ∼ 16 16 16 进制),所给整数在 i n t int int 范围内。
不同进制的表示符号为 ( 0 , 1 , … , 9 , a , b , … , f ) (0,1,…,9,a,b,…,f) (0,1,…,9,a,b,…,f)或者 ( 0 , 1 , … , 9 , A , B , … , F ) (0,1,…,9,A,B,…,F) (0,1,…,9,A,B,…,F)
输入格式
输入只有一行,包含三个整数
a
,
n
,
b
a,n,b
a,n,b。
a
a
a 表示其后的
n
n
n 是
a
a
a 进制整数,
b
b
b 表示欲将
a
a
a 进制整数
n
n
n 转换成
b
b
b 进制整数。
a , b a,b a,b 是十进制整数。
数据可能存在包含前导零的情况。
输出格式
输出包含一行,该行有一个整数为转换后的
b
b
b 进制数。
输出时字母符号全部用大写表示,即 ( 0 , 1 , … , 9 , A , B , … , F ) (0,1,…,9,A,B,…,F) (0,1,…,9,A,B,…,F)。
数据范围
2
≤
a
,
b
≤
16
,
2≤a,b≤16,
2≤a,b≤16,
给定的
a
a
a 进制整数
n
n
n 在十进制下的取值范围是
[
1
,
2147483647
]
[1,2147483647]
[1,2147483647]。
输入样例:
15 Aab3 7
输出样例:
210306
#include
using namespace std;
int a, b;
string s;
int get(char & c){
if('0' <= c && c <= '9') return c - '0';
return tolower(c) - 'a' + 10;
}
int getTen(int a, string s){
int res = 0;
for(int i = 0; i < s.size(); i++)
res = res * a + get(s[i]);
return res;
}
string trans(int n, int b){
string res;
char c;
while(n){
int x = n % b;
if(x < 10) c = x + '0';
else c = 'A' + (x - 10);
res = c + res;
n /= b;
}
return res;
}
int main(){
cin >> a >> s >> b;
int x = getTen(a, s);
cout << trans(x, b) << endl;
return 0;
}