#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stack>
#include <map>
using namespace std;

char IntToChar(int x) { //数字转换成字符
    if (x < 10) {
        return x + '0';
    } else {
        return x - 10 + 'a';
    }
}

int CharToInt(char
              c) { //字符转换成数字,这里主要是超过10进制的时候会用到字母
    if (c >= '0' && c <= '9') {
        return c - '0';
    } else {
        return c - 'A' + 10;
    }
}

int main() {
    stack<char> mystack;
    int m, n;
    while (scanf("%d%d", &m, &n) != EOF) {
        string num;
        cin >> num;
        //先转换成10进制
        long long cur = 0;
        for (int i = 0; i < num.size(); i++) {
            cur *= m;
            cur += CharToInt(num[i]);
        }
        //此时cur就为10进制
        //再转为n进制
        //printf("%d", cur);
        while (cur != 0) {
            char t = IntToChar(cur % n);
            mystack.push(t);
            cur /= n;
        }
        while (!mystack.empty()) {
            char t = mystack.top();
            mystack.pop();
            printf("%c", t);
        }
        printf("\n");
    }
}
// 64 位输出请用 printf("%lld")

主要就是有一个字符很麻烦,要有两个函数来帮忙。其余的跟平常的进制转换没什么区别。