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