这里主要进位问题;
按字符读入
for 遍历字符串
if 是 ‘,’
if 现在是a a.push_back(num);
else 现在是b b.push_back(num);
num=0; 位数=1;
else if 是‘+’
num=0; 位数=1
现在改成b
else 是数字
num=num+位数*数字
位数*10
b.push_back(最后一个num)
for 遍历a和b直到其中一个的最后{
ans.push_back(a+b+进位)%prime[i]
进位=(a+b+进位)/prime[i]
}
while 直到a的最后
重复上述
while 直到b的最后
重复上述
if (进位非零)ans.push_back(进位)
for ans从后往前输出
#include <bits/stdc++.h>
using namespace std;
int prime[10]={2,3,5,7,11,13};
string s;
vector<int> a,b,ans;
int num,flag,re,dig=1;
int main(int argc, char** argv) {
cin>>s;
for(int i=s.size()-1;i>=0;i--){
if(s[i]==','){
if(flag==0)
a.push_back(num);
else
b.push_back(num);
num=0; dig=1;
}else if(s[i]=='+'){
a.push_back(num);
flag=1;
num=0;
dig=1;
}else {
num=num+(s[i]-'0')*dig;
dig*=10;
}
}
b.push_back(num);
int i;
for(i=0;i<a.size()&&i<b.size();i++){
ans.push_back((a[i]+b[i]+re)%prime[i]);
re=(a[i]+b[i]+re)/prime[i];
}
while(i<a.size()) ans.push_back((a[i]+re)%prime[i]), re=(a[i]+re)/prime[i], i++;
while(i<b.size()) ans.push_back((b[i]+re)%prime[i]), re=(b[i]+re)/prime[i], i++;
if(re) ans.push_back(re);
for(int i=0;i<ans.size();i++){
ans[i]%=prime[i];
ans[i+1]+=ans[i]/prime[i];
}
for(int i=ans.size()-1;i>=0;i--){
cout<<ans[i];
if(i) cout<<",";
}
return 0;
} 
京公网安备 11010502036488号