/*厘清题意:十进制38=火星制 1*5*3*2+1*3*2+1*2*/ #include <bits/stdc++.h> #include <vector> using namespace std; int prime[25]; string num1,num2;//两个火星数 vector<int> a,b; //判断是不是素数 bool isprime(int x) { for(int i=2;i*i<=x;i++) { if(x%i==0) return false; } return true; } //先构建前25个素数数组 void create_prime() { int index=0; int i=2; while(true) { if(isprime(i)) { prime[index++]=i; } i++; if(index==25) break; } } //将数组短的前面补零 void mysolve() { if(a.size()<b.size()) { a.insert(a.begin(),b.size()-a.size(),0); } else { b.insert(b.begin(),a.size()-b.size(),0); } } //计算两个火星数 vector<int> myadd() { mysolve();//将短的高位补上 vector<int> res(a);//赋值a,b都可以 int carry=0;//进位 int index=0;//标记是哪一位 for(int i=a.size()-1;i>=0;i--,index++) { res[i]=(carry+a[i]+b[i])%prime[index];//更新相加结果 carry=(carry+a[i]+b[i])/prime[index];//更新进位 } if(carry>0) { res.insert(res.begin(),carry);//补充一个进位 } return res; } //将带逗号的s转化为整数数组 void string_transto_int_vector(string s,vector<int> &v) { string t;//暂存 stringstream ss(s); while(getline(ss,t,',')) { v.push_back(stoi(t)); } } int main() { //先构建前25个素数数组 create_prime(); while(cin>>num1>>num2) { //清理一下上一轮 a.clear(); b.clear(); //将num1和num2转化为两个整数数组 string_transto_int_vector(num1,a); string_transto_int_vector(num2,b); //进行加法 vector<int> final_res=myadd(); //进行输出 for(int i=0;i<final_res.size();i++) { if(i!=final_res.size()-1) cout<<final_res[i]<<","; else cout<<final_res[i]<<endl; } } } // 64 位输出请用 printf("%lld")