本题长度超过正常范围,所以无法通过转十进制计算再转回。
模拟数学竖式计算,逢十进一变成逢B进一(高精度加法)。
#include <bits/stdc++.h>
using namespace std;
int B;
string a,b,c;
int num[128]={};
char sig[128]={};
void init(){
for(int i='0';i<='9';i++) num[i]=i-'0';
for(int i='A';i<='Z';i++) num[i]=i-'A'+10;
for(int i=0;i<=9;i++) sig[i]='0'+i;
for(int i=10;i<36;i++) sig[i]='A'+i-10;
}
int main(){
init(); // 初始化
cin>>B;
cin>>a>>b;
int jw=0;
for(int i=a.size()-1,j=b.size()-1;i>=0||j>=0;i--,j--){
if(i<0) a[i=0]='0';
if(j<0) b[j=0]='0';
int t=num[a[i]]+num[b[j]]+jw;
jw=t/B;
c+=sig[t%B];
}
if(jw) c+=to_string(jw);
while(c.back()=='0'&&c.size()>1) c.resize(c.size()-1);
reverse(c.begin(),c.end());
cout<<c;
}