测试输入包含若干测试用例,每个测试用例占一行,包含两个火星正整数A和B,火星整数的相邻两位数用逗号分隔,A和B之间有一个空格间隔。
对每个测试用例输出1行,即火星表示法的A+B的值。
1,0 2,1
1,0,1
4,2,0 1,2,0
1,1,1,0
1 10,6,4,2,1
1,0,0,0,0,0
还是一样的思想,先转化为10进制,再转化为我们想要的 //这题都不用判断字母了??白白多写了。。 #include <bits/stdc++.h> using namespace std; int arr[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}; int Compute(string str) { vector<int>myvector; int a=0; int b=str.find(",",a+1); while(b!=string::npos) { myvector.push_back(atoi(str.substr(a+1,b-a-1).c_str())); a=b; b=str.find(",",a+1); } int answer=0; for(int i=0;i<myvector.size();i++) { answer=answer*arr[myvector.size()-i-1]; answer+=myvector[i]; } return answer; } int main() { string str1,str2; while(cin>>str1>>str2) { if(str1=="0"&&str2=="0") break; str1=","+str1+","; str2=","+str2+","; //将输入转化为10进制 int A=Compute(str1); int B=Compute(str2); int n=A+B; //下面把10进制转化为其他 int k=0; vector<int>answer; while(n!=0) { answer.push_back(n%arr[k]); n/=arr[k]; k++; } reverse(answer.begin(),answer.end()); cout<<answer[0]; for(int i=1;i<answer.size();i++) { cout<<","<<answer[i]; } cout<<endl; } return 0; }
#include <bits/stdc++.h> using namespace std; const int AX = 1e2 + 6 ; char a[AX],b[AX]; vector<int>p ; vector<int>v[5] ; void get_prime(){ for( int i = 2 ; ; i++ ){ if( p.size() == 30 ) break ; int len = sqrt(i) + 1 , f = 1 ; for( int j = 2 ; j < len ; j++ ){ if( i % j == 0 ){ f = 0 ; break ; } }if( f ) p.push_back(i); } } int main() { get_prime(); while( ~scanf("%s%s",a,b) ) { if( !strcmp(a,"0") && !strcmp(b,"0") ) break; char *s = strtok( a , "," ); v[0].clear(); v[1].clear(); while( s ){ v[0].push_back( atoi(s) ) ; s = strtok( NULL , "," ); } s = strtok( b , "," ) ; while( s ) { v[1].push_back( atoi(s) ); s = strtok( NULL , "," ); } reverse( v[0].begin() , v[0].end() ); reverse( v[1].begin() , v[1].end() ); int id = ( v[0].size() > v[1].size() ? 0 : 1 ) ; for( int j = 0 ; j < v[!id].size() ; j++ ){ v[id][j] += v[!id][j] ; } int c = 0 ; int len = v[id].size(); for( int i = 0 ; i < len ; i++ ){ int t = ( c + v[id][i] ) / p[i] ; v[id][i] = ( c + v[id][i] ) % p[i] ; c = t ; } if( c ) v[id].push_back(c); for( int i = v[id].size() - 1 ; i >= 0 ; i-- ){ printf("%d",v[id][i]); if( i ) printf(","); }printf("\n"); } return 0 ; }
#include <stdio.h> #include <string.h> #define N 30 #define M 300 int prime[M], primeSize=0;//素数表、素数个数 bool mark[M];//false表示这个数字没有被访问过 int a[N], b[N];//两个大数 void Add(int a[N], int b[N]) {//计算两个大数之和并输出 for(int i=0; i<N; i++) { a[i]+=b[i]; } for(int i=0; i<N-1; i++) { if(a[i]>=prime[i]) { a[i+1]+=a[i]/prime[i]; a[i]=a[i]%prime[i]; } } int high=N-1; while(high>0&&a[high]==0) high--; printf("%d", a[high]); for(int i=high-1; i>=0; i--) printf(",%d", a[i]); printf("\n"); } void GetNum(char str[M]) {//从字符串中获取两个大数的信息 for(int i=0; i<N; i++) a[i]=b[i]=0; int pos=0; int pa=0, pb=0; int len=strlen(str); while(str[pos]!=' ') { if(str[pos]==',') { pos++; pa++; } a[pa]=a[pa]*10+(str[pos]-'0'); pos++; } pos++; while(pos<len) { if(str[pos]==',') { pos++; pb++; } b[pb]=b[pb]*10+(str[pos]-'0'); pos++; } int sa=0, sb=0; while(pa>sa) { int temp=a[pa]; a[pa]=a[sa]; a[sa]=temp; pa--; sa++; } while(pb>sb) { int temp=b[pb]; b[pb]=b[sb]; b[sb]=temp; pb--; sb++; } } bool TimeToSayGoodbye(int a[N], int b[N]) {//判断是否跳出循环结束程序 for(int i=0; i<N; i++) { if(a[i]!=0 || b[i]!=0) return false; } return true; } int main() { for(int i=0; i<M; i++) mark[i]=false; for(int i=2; i<M; i++) { if(mark[i]==false) prime[primeSize++]=i; else continue; if(primeSize>=N) break;//不用记录那么多的素数 for(int j=i*i; j<M; j+=i) { mark[j]=true; } } char str[M]; while(gets(str)) { GetNum(str); if(TimeToSayGoodbye(a, b)) break; Add(a, b); } return 0; }
#include<iostream> #include<algorithm> #include<string> #include<cstring> //对于不确定的数一定要赋值 using namespace std; int x[30],y[30]; int res[30]; int prime[25]={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}; int main() { string a,b; int j=0,k=0; while(cin>>a>>b&&a!="0"&&b!="0"){ memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); j=0,k=0; for(int i=0;i<a.size();i++){ if(a[i]==',') j++; else x[j]=x[j]*10+a[i]-'0'; } for(int i=0;i<b.size();i++){ if(b[i]==',') k++; else y[k]=y[k]*10+b[i]-'0'; } reverse(x,x+j+1); reverse(y,y+k+1); int len = max(j,k)+1; for(int i=0;i<=len;i++){ res[i] = x[i]+y[i]; } for(int i=0;i<len;i++){ if(res[i]>=prime[i]){ res[i]-=prime[i]; res[i+1]+=1; if(i==len-1) len =len+1; } } for(int i=len-1;i>0;i--) cout<<res[i]<<","; cout<<res[0]<<endl; } return 0; }
#include<stdio.h> #include<string.h> #define N 65 int p[26]={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}; void sc_sum(int s[], char c[]) { int js=0, ji=1, flag=0, i; for(i=strlen(c)-1; i>=0; i--) //对c倒着数,正着存入s中 { if(c[i]!=',') { js+=(c[i]-'0') *ji; ji*=10; } if(c[i]==','||i==0) //如果遇到','存入s,开始下个数据 { //考虑到开头前边没',' s[flag++]+=js; js=0; ji=1; } } } int main() { char c1[N], c2[N]; int s[N/2], i; while(scanf("%s%s", c1, c2), c1[0]!='0', c2[0]!='0') { memset(s, 0, sizeof(s)); sc_sum(s, c1); sc_sum(s, c2); int sum, j; for(i=0; i<N/2; i++) { s[i+1]+=s[i]/p[i]; s[i]%=p[i]; sum=0; //如果后面都是0,停止循环, for(j=i+1; j<N/2; j++) sum+=s[j]; if(sum==0) //此时i为最后一个数字的下标 break; } for(; i>=1; i--) //逆序输出,从最高位到最低位 printf("%d,", s[i]); printf("%d\n", s[0]); memset(c1, '0', sizeof(c1)); memset(c2, '0', sizeof(c2)); } return 0; }
while True: try: primeNum = [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] a,b = input().split() if a=='0' or b == '0': break a = list(map(int,a.split(',')[::-1])) #以逗号分隔后反转数组 b = list(map(int,b.split(',')[::-1])) if len(a) > len(b): #保持数组a比较短 a,b = b,a result = [] carry = 0 for i in range(len(a)): #循环数组a,此时a、b和进位carry相加 carry,temp = divmod(a[i]+b[i]+carry,primeNum[i]) result.insert(0,temp) #在数组前面插入数,(也可以在后面加入数,之后反转输出) for i in range(len(a),len(b)): #循环剩余的数组b,此时b和进位carry相加 carry, temp = divmod(b[i] + carry, primeNum[i]) result.insert(0, temp) if carry != 0: #最高一位如果有进位,则加进去。 result.insert(0,carry) print(",".join(map(str,result))) except Exception: break
package com.speical.first;
import java.util.Scanner;
/**
* 火星A + B
*
* 素数打表 + 大数相加
*
* 注意此题的数每一位可能超过一位
* 所以相加时不能用以往的char数组
* 老老实实用int数组省事
*
* 期待大家的优化
* @author special
* @date 2018年1月6日 上午11:48:29
*/
public class Pro123 {
static final int SIZE = 30;
static int[] prime = new int[SIZE];
public static boolean isPrime(int num){ //判断是否是素数
for(int i = 2; i <= Math.sqrt(num); i++){
if(num % i == 0){
return false;
}
}
return true;
}
public static void init(){ //获得前29个素数
int index = 1;
for(int n = 2; index < SIZE; n++){
if(isPrime(n)){
prime[index++] = n;
}
}
}
public static int[] convertInt(String str){ //输入的火星文转换成int数组,数的低位对应数组的高位
String[] nums = str.split(",");
int[] num = new int[nums.length];
int temp;
for(int i = 0; i < nums.length; i++){
temp = 0;
for(int j = 0; j < nums[i].lengt***emp = temp * 10 + nums[i].charAt(j) - '0';
}
num[i] = temp;
}
return num;
}
public static void add(String A, String B){ // 火星文相加
int[] num1 = convertInt(A);
int[] num2 = convertInt(B);
int[] result = new int[Math.max(num1.length, num2.length) + 1]; //结果的数组大小最大为相加两个数的最大 + 1
int index = result.length, carry = 0, temp, redix = 1;
for(int i = num1.length - 1, j = num2.length - 1; i >= 0 || j >= 0; i--, j--){
temp = (i >= 0 ? num1[i] : 0) + (j >= 0 ? num2[j] : 0) + carry;
carry = temp / (prime[redix]);
temp %= prime[redix++];
result[--index] = temp;
}
if(carry > 0){
result[--index] = carry;
}
boolean flag = true;
for(int i = index; i < result.length; i++){ // 根据结果数组打印
System.out.print((flag ? "" : ",") + result[i]);
flag = false;
}
System.out.println();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
init();
Scanner input = new Scanner(System.in);
while(input.hasNext()){
String A = input.next();
String B = input.next();
if(A.equals("0") || B.equals("0")) break;
add(A, B);
}
}
}
#include <iostream> #include <vector> #include <string> #include <algorithm> #include <math.h> using namespace std; int stringToInt(string s){ int num; for (int i=0; i<s.size(); ++i) { num = 10 * num + (s[i] - '0'); } return num; } vector<int> split(string s){ string str; vector<int> nums; for(int i=0;i<s.size();i++){ if(s[i]==','){ int tempNum = stringToInt(str); nums.push_back(tempNum); str = ""; continue; } str.push_back(s[i]); } int tempNum = stringToInt(str); nums.push_back(tempNum); return nums; } // 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 int main(){ int quan[] = { 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 }; int carry = 0; // 进位 int index = 0; // 权位 vector<int> result; string num1 = "1"; string num2 = "10,6,4,2,1"; cin >> num1; cin >> num2; vector<int> v1 = split(num1); vector<int> v2 = split(num2); int length1 = v1.size()-1; int length2 = v2.size()-1; while(length1>=0 || length2>=0 || carry!=0){ int c1 = length1>=0 ? v1[length1] : 0; int c2 = length2>=0 ? v2[length2] : 0; int currentNum = c1 + c2 + carry; carry = currentNum / quan[index]; result.push_back(currentNum%quan[index]); index++; length1--; length2--; } string resultString = ""; for(int i=result.size()-1;i>=0;i--){ if(i==0){ resultString += to_string(result[i]); }else{ resultString += to_string(result[i]); resultString += ","; } } cout << resultString; }
#include <iostream> #include <cmath> #include <vector> #include <string> using namespace std; vector<int> prime; void Initial(){ //求前25个素数 for(int i=2; prime.size()<25; ++i){ int j; for(j=sqrt(i); j>=2; --j){ if(i%j==0){ break; } } if(j==1) prime.push_back(i); } return; } int Prime_factorial(int k){ //素数阶乘 int res=1; for(int i=0; i<k; ++i){ res *= prime[i]; } return res; } int Transit(string str){ //火星数转换为十进制数 int sum, k=0; if(str[str.size()-1]-'0'==0) sum=0; else sum=1; for(int i=str.size()-3; i>=0; i-=2){ int temp = str[i] - '0'; for(int j=1; str[i-1]>='0' && str[i-1] <='9'; ++j, --i){ temp += (str[i-1]-'0') * pow(10,j); } ++k; sum += temp * Prime_factorial(k); } return sum; } void solve(int num){ //十进制数转火星数 vector<int> res; for(int i=0; num!=0; ++i){ res.push_back(num % prime[i]); num /= prime[i]; } for(int i=res.size()-1; i>=1; --i){ cout << res[i] << ','; } cout << res[0]; return; } int main(){ Initial(); string str1, str2; while(cin >> str1 >> str2){ int sum = Transit(str1) + Transit(str2); solve(sum); } return 0; }
#include <array> #include <cmath> #include <cstdlib> #include <iostream> #include <istream> #include <ostream> #include <sstream> #include <stack> #include <string> #include <vector> using namespace std; vector<int>prime; //素数数组 bool isPrime(int n) { //判断是否为素数 if (n < 2) { return false; } int bound = sqrt(n); //判断边界 for (int i = 2; i <= bound; i++) { if (n % i == 0) { return false; } } return true; } void initial() { //初始化prime数组 for (int i = 2; prime.size() < 25; i++) { if (isPrime(i)) { prime.push_back(i); } } } struct MarsInteger { int* digit; //数组表示各位(数组长度为25) int digitNum = 0; //位数 MarsInteger() { //构造函数 digit = new int[25](); //初始化数组 } MarsInteger operator+(const MarsInteger& x) { //重载加法 MarsInteger answer; int carry = 0; for (int i = 0; i < digitNum || i < x.digitNum; i++) { int current = digit[i] + x.digit[i] + carry; carry = current / prime[i]; answer.digit[answer.digitNum++] = current % prime[i]; } if (carry) { answer.digit[answer.digitNum++] = carry; } return answer; } }; istream& operator>>(istream& in, MarsInteger& x) { //重载输入流运算符 string str; in >> str; istringstream sstream(str); stack<string>myStack; while (getline(sstream, str, ',')) { myStack.push(str); } while (!myStack.empty()) { x.digit[x.digitNum++] = atoi(myStack.top().c_str()); myStack.pop(); } return in; } ostream& operator<<(ostream& out, const MarsInteger& x) { //重载输出流运算符 for (int i = x.digitNum - 1; i >= 0; i--) { out << x.digit[i]; if (i > 0) { out << ","; } } return out; } int main() { initial(); MarsInteger a, b; while (cin >> a >> b) { cout << a + b << endl; } return 0; }
#include <cmath> #include <cstdio> #include <iostream> #include <vector> using namespace std; //生成素数 int prime[25]; bool isprime(int n){ int m=sqrt(n); for(int i=2;i<=m;i++){ if(n%i==0){ return false;; } } return true; } void initial(){ int j=0; for(int i=2;j<25;i++){ if(isprime(i)){ prime[j]=i; j++; } } } //返回的vector顺序是反方向的 vector<int> strAdd(vector<int> s1,vector<int> s2){ while(s1.size()<s2.size()){ s1.insert(s1.begin(),0); } while(s2.size()<s1.size()){ s2.insert(s2.begin(),0); } vector<int> s; int carry=0; for(int i=s1.size()-1,k=0;i>=0;i--,k++){ int temp=s1[i]+s2[i]+carry; s.push_back(temp%prime[k]); carry=temp/prime[k]; } if(carry!=0){ s.push_back(carry); } return s; } int main() { initial(); vector<int> s1,s2; //使用一个向量指针方便输入两个不同向量; vector<int>* temp=&s1; int n;char c; while(scanf("%d%c",&n,&c)!=-1){ (*temp).push_back(n); if(c=='\n'){ break; }else if(c==' '){ temp=&s2; } } //两向量相加 vector<int> s=strAdd(s1,s2); for(int i=s.size()-1;i>0;i--){ cout<<s[i]<<","; } cout<<s[0]<<endl; }
#include <iostream> #include <string> #include <vector> using namespace std; int odd[] = { 2,3,5,7,11,13,17,19 }; vector<int> vec; int substring2int(string x, int from, int to) { int ans = 0; for (int i = from; i < to; i++) { ans = ans * 10 + (x[i] - '0'); } return ans; } void string2int(string x) { vec.clear(); int from = 0; for (int i = 0; i < x.length(); i++) { if (x[i] == ',') { vec.push_back(substring2int(x, from, i)); from = i + 1; } else if (i == x.length() - 1) vec.push_back(substring2int(x, from, i+1)); } } int mar2int(string x) { int ans = 0, j = 0; string2int(x); for (int i = 0; i < vec.size(); i++) { ans = ans * odd[vec.size() - 1 - i] + vec[i]; } return ans; } void int2mar(int x) { string ans; int i = 0; while (x) { ans.push_back('0' + x % odd[i]); x /= odd[i]; i++; } for (int i = ans.length() - 1; i >= 0; i--) { if (i == ans.length() - 1) printf("%d", ans[i] - '0'); else printf(",%d", ans[i] - '0'); } } int main() { string a, b; while (cin >> a >> b) { vec.clear(); if (a == "0" || b == "0") break; int e_a = mar2int(a); int e_b = mar2int(b); int2mar(e_a + e_b); } return 0; }
#include<iostream> #include<string> #include<vector> #include<math.h> using namespace std; bool isPirmer(int n) { //判断素数 for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) return false; } return true; } void arrayab(string s, vector<int>& vec) {//将a,b转换成int string out = ""; for (int i = s.length() - 1; i >= 0; i--) { if (s[i] != ',') out = s[i] + out; else { vec.push_back(stoi(out)); out = ""; } } vec.push_back(stoi(out)); } int main() { int primer[25]; //a,b最大25位 int sum = 2; //获取前25个素数 for (int i = 0; i < 25;) { if (isPirmer(sum)) primer[i++] = sum; sum++; } string a, b; while (cin >> a >> b) { if (a == "0" || b == "0") break; vector<int> arrayA, arrayB; arrayab(a, arrayA); arrayab(b, arrayB); //转换a,b vector<int>::iterator ite1 = arrayA.begin(); vector<int>::iterator ite2 = arrayB.begin(); string outstring = ""; int temp = 0; //判断执行到第几位数 int carry = 0;//进位符 while (ite1 != arrayA.end() || ite2 != arrayB.end()) { while (ite2 == arrayB.end() && ite1 != arrayA.end()) { outstring = "," + to_string((*ite1 + carry) % primer[temp]) + outstring; *ite1 + carry >= primer[temp] ? carry = 1 : carry = 0; ite1++; temp++; } while (ite2 != arrayB.end() && ite1 == arrayA.end()) { outstring = "," + to_string((*ite2 + carry) % primer[temp]) + outstring; *ite2 + carry >= primer[temp] ? carry = 1 : carry = 0; temp++; ite2++; } if (ite2 == arrayB.end() && ite1 == arrayA.end()) break; outstring = "," + to_string((*ite1 + *ite2 + carry) % primer[temp]) + outstring; *ite1 + *ite2 + carry >= primer[temp] ? carry = 1 : carry = 0; ite1++; ite2++; temp++; } if (carry == 1) outstring = "1" + outstring; else outstring = outstring.substr(1); cout << outstring << endl; } }
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<vector> using namespace std; int prime[26]; int x[26], y[26]; bool check(int n){ for(int i=2; i<=sqrt(n); i++){ if(n%i == 0){ return false; } } return true; } void setPrime(){ int i=2; int count = 0; while(count < 26){ if(check(i)){ prime[count] = i; count++; } i++; } } int main(){ setPrime(); string a, b; while(cin>>a>>b&&a!="0"&&b!="0"){ memset(x, 0, sizeof(x)); memset(y, 0, sizeof(y)); int j=0, k=0; for(int i=0; i< a.size(); i++){ if(a[i] == ','){ j++; }else{ x[j] = x[j]*10+a[i]-'0'; } } for(int i=0; i< b.size(); i++){ if(b[i] == ','){ k++; }else{ y[k] = y[k]*10+b[i]-'0'; } } reverse(x, x+j+1); reverse(y, y+k+1); int len = max(j, k)+1; int i=0; vector<int> z; int t=0; while(i< len || t!=0){ int sum = x[i]+y[i]+t; z.push_back(sum%prime[i]); t = sum/prime[i]; i++; } for(vector<int>::reverse_iterator i = z.rbegin(); i!=z.rend(); i++){ if(i!=z.rbegin()){ cout << ','; } cout << (*i); } cout << endl; } return 0; }
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String s = sc.nextLine(); if (s.startsWith("0")) break; String[] ss = s.split(" "); String[] Aarray = ss[0].split(","); String[] Barray = ss[1].split(","); int A = 0, B = 0; //求素数 ArrayList<Integer> primeNum = new ArrayList<>(); primeNum.add(1); for (int i = 0; i < 20; i++) { if (isPrim(i)) primeNum.add(i); } int[] base = new int[primeNum.size()]; //38=1*(5*3*2*1)+1*(3*2*1)+1*(2*1)+0*(1) //base[0]=1,base[1]=2*1,base[2]=3*2*1,base[3]=5*3*2*1 .......... base[0] = 1; for (int i = 1; i < primeNum.size(); i++) { base[i] = base[i - 1] * primeNum.get(i); } A = transTo10(Aarray, base); B = transTo10(Barray, base); int num = A + B; StringBuilder result = transTohuo(num, base); System.out.println(result); } } private static StringBuilder transTohuo(int num, int[] base) { StringBuilder result = new StringBuilder(); if (num == 1) { result.append("1"); return result; } int k = maxIndex(num, base); result.append(num / base[k]); result.append(','); num = num % base[k]; k--; while (num != 0) { if (base[k] > num) { result.append(0); k--; } else { result.append(num / base[k]); num = num % base[k]; k--; } if (k != -1) result.append(','); } while (k != -1) { result.append(num);//num=0 if (k != 0) result.append(','); k--; } return result; } public static boolean isPrim(int num) { int i; for (i = 2; i < num; i++) { if (num % i == 0) break; } if (i == num) return true; else return false; } public static int transTo10(String[] arr, int[] base) { int num10 = 0; for (int i = 0; i < arr.length; i++) { int nowBase = base[i]; int currentOrder = Integer.parseInt(arr[arr.length - i - 1]);//当前位数 num10 = num10 + currentOrder * nowBase; } return num10; } public static int maxIndex(int num, int[] base) { int index = 0;//记录不大于num的最大值所在索引 for (int i = 0; i < base.length; i++) { if (base[i] > num) { index = i - 1; break; } } return index; } }
#include<iostream> #include<algorithm> #include<string> #include<cstring> #include<cmath> //对于不确定的数一定要赋值 using namespace std; int x[30],y[30]; int res[30]; int prime[25]={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}; int main() { string a; string b; while(cin>>a>>b&&a!="0"&&b!="0") { memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); int numberA=0; int numberB=0; for(int i=0;i<a.size();i++) { if(a[i]==',') { continue; } else{ int all=0; while(1) { all=all*10+(a[i]-'0'); i++; //cout<<all<<endl; if(a[i]==','||i>=a.size())//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! { i--; break; } } x[numberA]=all; numberA++; } } for(int i=0;i<b.size();i++) { //cout<<"i:"<<i<<endl; if(b[i]==',') { continue; } else { int all=0; while(1) { all=all*10+(b[i]-'0'); i++; //cout<<all<<endl; if(b[i]==','||i>=b.size())//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! { i--; break; } } y[numberB]=all; numberB++; } } for(int i=0;i<numberA/2;i++){ int temp=x[i]; x[i]=x[numberA-i-1]; x[numberA-i-1]=temp; } for(int i=0;i<numberB/2;i++){ int temp=y[i]; y[i]=y[numberB-i-1]; y[numberB-i-1]=temp; } // for(int i=0;i<numberA;i++){ // cout<<"x["<<i<<"]:"<<x[i]<<endl; // } // cout<<endl; // for(int i=0;i<numberB;i++){ // cout<<"y["<<i<<"]:"<<y[i]<<endl; // } // cout<<endl; int carry=0; int number=max(numberA,numberB)+1; for(int i=0;i<number;i++) { res[i]=x[i]+y[i]+carry; carry=res[i]/prime[i]; //cout<<carry<<endl; res[i]=res[i]%prime[i]; } int pos=30; while(res[pos]==0) { pos--; } for(int i=pos;i>=0;i--) { cout<<res[i]; if(i!=0){ cout<<","; } } cout<<endl; } return 0; }