这里主要进位问题;
按字符读入 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; }