经验总结:
由于输入的PAT数是不超过N位进制表的,所以,可以把PAT数长度补成和进制表一直,方便运算。
使用stoll函数会导致两个测试点运行时错误。
C++代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
string table,a,b,ans = "";
cin>>table>>a>>b;
a.insert(0,table.size()-a.size(),'0');
b.insert(0,table.size()-b.size(),'0');
int num = 0;
for(int i=table.size()-1; i>=0; i--) {
num += a[i]-'0'+b[i]-'0';
ans.insert(ans.begin(),num%(table[i]-'0'?table[i]-'0':10)+'0');
num /= (table[i]-'0'?table[i]-'0':10);
}
ans.insert(ans.begin(),num%10+'0'); //若最后运算结果还有进位的
// cout<<stoll(ans); //使用此函数会有两个运行时错误。
for(int i=0; i<ans.size(); i++) {
if(ans[i]!='0') { //从第一个非零字符开始输出
cout<<ans.substr(i);
return 0;
}
}
cout<<0; //如果最终答案全为0
return 0;
}