1,0,1
1,1,1,0
1,0,0,0,0,0
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> a,b,c;//a用來存的是A,b用來存的是B,c用來存的是和。動態;
string A,B;
int p[30]=
{
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,
71,73,79,83,89,97,101,103,107,109,113
};//偷個懶,直接列出素數數組,不寫了
void toint()
{ a.clear();
b.clear();
for( int i=0; i<A.length(); i++)
{
if(A[i]==',')
A[i]=' ';
}
for( int i=0; i<B.length(); i++)
{
if(B[i]==',')
B[i]=' ';
}
int v;
istringstream str1(A);//istringtream是一個string對象構造來的,istringtream類從一個
//string對象讀取字符字符串構造字符串流的時候,空格會造成字符串參數的內部分界。利用分解獲取
//的方法實際完成了到整型對象的轉換。
while(str1>>v)
{
a.push_back(v);//對a賦值
}
istringstream str2(B);
while(str2>>v)
{
b.push_back(v);
}
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
}
void get()//開始相加
{ c.clear();
int carry=0;
int la=a.size();
int lb=b.size();
int v=0;
for( int i=0; i<(la>lb?la:lb); i++)
{
if(i>=la)
v=b[i]+carry;
else if(i>=lb)
v=a[i]+carry;
else
v=a[i]+b[i]+carry;
c.push_back(v%p[i]);
carry=v/p[i];
if(i==(la>lb?la:lb)-1&&carry!=0)
{
c.push_back(carry);
}
}
reverse(c.begin(),c.end());//相加完要反轉;
for( int i=0;i<c.size();i++){//別輸出多了。
if(i==c.size()-1){
cout<<c[i]<<endl;
break;
}
cout<<c[i]<<",";
}
}
int main()
{
while(cin>>A>>B&&A!="0"&&B!="0")
{
toint();
get();
}
return 0;
}
/**************************************************************
Problem: 1016
User: roye
Language: C++
Result: Accepted
Time:10 ms
Memory:1552 kb
****************************************************************/