打一开始做就听人说这个难,吓得我把它放到了最后做,不过如此嘛。
这里说说样例的坑点
1.最后结果可能高位有0;例如样例结果07201
2.结果会进位,
3.有可能结果是0,(此处取决于你的输出方式)

#include<cstdio>
#include<string.h>
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
int main(){
    char jinzhibiao[21]={'\0'};
    scanf("%s",jinzhibiao);     //输入进制表
    getchar();                  //接受第一行的换行符
    char num1[21]={'\0'},num2[21]={'\0'};
    scanf("%s",num1);
    getchar();
    scanf("%s",num2);
    reverse(jinzhibiao,jinzhibiao+strlen(jinzhibiao));
    reverse(num1,num1+strlen(num1));
    reverse(num2,num2+strlen(num2));
    int flag=0;//进位
    int final[21]={0},wei=0;
    for(int i=0;i<strlen(jinzhibiao);i++){
        int jinzhi;//取出当前位的进制数
        if(jinzhibiao[i]=='0') jinzhi=10;
        else if(isdigit(jinzhibiao[i])) jinzhi=jinzhibiao[i]-'0';
        int n1= (num1[i]=='\0')?0:(num1[i]-'0');
        int n2= (num2[i]=='\0')?0:(num2[i]-'0');
        int n=n1+n2+flag;//当前位的结果;
        flag=n/jinzhi;
        final[wei++]=n%jinzhi;
    }
    if(flag!=0) final[wei++]=flag;
    flag=0;
    for(int i=wei-1;i>=0;i--){
        if(final[i]==0&&flag==0) continue;
        if(final[i]!=0) flag=1;
        printf("%d",final[i]);

    }
    if(flag==0) printf("0");
    return 0;
}