题目:1074 宇宙无敌加法器 - PAT (Basic Level) Practice (中文) (pintia.cn)
这道题是普通模拟加法的变种,我们还是进行加法模拟,但是多种进制的问题我们可以把各种进制存储到一个数组里根据情况选择就可以了:
js
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int>D,B,A,ans;
string s;cin>>s;
for(int i=s.size()-1;i>=0;i--)
{
//这里要特殊处理一下,0表示10进制
if(s[i]!='0')D.push_back(s[i]-'0');
else D.push_back(10);
}
cin>>s;
for(int i=s.size()-1;i>=0;i--)
{
B.push_back(s[i]-'0');
}
cin>>s;
for(int i=s.size()-1;i>=0;i--)
{
A.push_back(s[i]-'0');
}
int t=0;
for(int i=0;i<A.size()||i<B.size();i++)
{
if(i<A.size())t+=A[i];
if(i<B.size())t+=B[i];
//此时t不仅存了每一位的值还存了每一位的进位
//求每一位的值
ans.push_back(t%D[i]);
//求是否有进位
t/=D[i];
}
if(t)ans.push_back(1); //进位
//如果有前导0就把前导0去了
while(ans.size()>1&&ans.back()==0)ans.pop_back();
//正序输出(逆序相加,所以输出要再次逆序,变为正序)
for(int i=ans.size()-1;i>=0;i--)
{
//if(i<ans.size)ans.pop_back();
cout<<ans[i];
}
return 0;
}