很丑但是很直观的解法
#include <iostream>
#include <vector>
using namespace std;
vector<int> res;
int main()
{
string n;
int a, b;
cin >> a >> n >> b;
long long x = 0;
while (n.size() > 1 && n.front() == '0') //去除前导0
n = n.substr(1);
for (int i = 0; i < n.size(); ++i) //转成十进制了
if (n[i] >= '0' && n[i] <= '9')
x = x * a + n[i] - '0';
else if (n[i] >= 'a' && n[i] <= 'f')
x = x * a + n[i] - 'a' + 10;
else if (n[i] >= 'A' && n[i] <= 'F')
x = x * a + n[i] - 'A' + 10;
while (x) //除留余数
{
res.push_back(x % b);
x /= b;
}
for (int i = res.size() - 1; i >= 0; --i)
{
if (res[i] >= 10)
printf("%c", 'A' + res[i] - 10);
else
cout << res[i];
}
return 0;
}