求任意两个不同进制非负整数的转换( 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<iostream>
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;
}