原题链接

思路:先把a进制转成10进制,再把10进制转成b进制

#include <iostream>
using namespace std;
int num(char ch)
{
    if (ch >= '0' && ch <= '9')
        return ch - '0';
    else if (ch >= 'A' && ch <= 'Z')
        return (ch - 'A' + 10);
    else
        return (ch - 'a' + 10);
}
long long tod(int k, string n)
{
    long long w = 0,p = 1;
    for (int i = n.size() - 1; i >= 0; i--)
    {
        w += num(n[i]) * p;
        p *= k;
    }
    return w;
}
void atob(string m,int one,int two)
{
    int a[10005],k = 0;
    long long n = tod(one,m);
    while (n)
    {
        a[++k] = n % two;
        n /= two;
    }
    for (int i = k; i >= 1; i--)
    {
        if (a[i] < 10)
            cout << a[i];
        else
            cout << char(a[i] - 10 + 'A');
    }
}
int main()
{
	int one,two;
    string m;
    while (cin >> one >> m >> two)
    {
        if (m == "0")
        {
            cout << 0 << endl;
            continue;
        }
        atob(m,one,two);
        cout << endl;
    }
    return 0;
}