进制转换,模拟

代码:

#include<iostream>
using namespace std;
char ans[10005];
int main(){
    ios::sync_with_stdio(false);
    int m,n;
    string x;
    while(cin>>m>>n){
        cin>>x;
        int cnt=x.length();
        long long t=0,xp=1;
        //先转为十进制数t,注意t是ll类型,否则会溢出
        for(int i=cnt-1;i>=0;--i) {
            if(x[i]<='9') t+=(x[i]-'0')*xp;
            else t+=(x[i]-'A'+10)*xp;
            xp*=m;
        }
        cnt=0;
        int extra;
        //再转为n进制数
        while(t){
           extra=t%n;
           if(extra<10) ans[++cnt]=char('0'+extra);
           else ans[++cnt]=char('a'+extra-10);
           t/=n;
        }
        for(int i=cnt;i>0;--i) printf("%c",ans[i]);
        printf("\n");
    }
    return 0;
}