自己写的方法。
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
using namespace std;
int prime[25];
void getPrime(){
prime[0] = 2;
int num = 1;
for(int i = 3; num < 25; i++){
bool flag = true;
for(int j = 2; j < i; j++){
if(i % j == 0){
flag = false;
break;
}
}
if(flag){
prime[num] = i;
num++;
}
}
}
stack<int> getNum(string s){
stack<int> res;
int i = 0;
int num = 0;
while(i <= s.length()){
while(s[i] != ',' && i != s.length()){
num = num * 10 + s[i] - '0';
i++;
}
if(s[i] == ',' || i == s.length()){
res.push(num);
num = 0;
i++;
}
}
return res;
}
int main(){
string a, b;
getPrime();
//vector<int> ;
stack<int> num1, num2, ans;
while(cin >> a >> b){
int t = 0;
if(a == "0" || b == "0") return 0;
num1 = getNum(a);
num2 = getNum(b);
int carry = 0;
while(!num1.empty() && !num2.empty()){
int tmp = num1.top() + num2.top() + carry;
ans.push(tmp % prime[t]);
carry = tmp / prime[t];
t++;
num1.pop();
num2.pop();
}
while(!num1.empty()){
int tmp = num1.top() + carry;
carry = tmp / prime[t];
ans.push(tmp % prime[t]);
t++;
num1.pop();
}
while(!num2.empty()){
int tmp = num2.top() + carry;
carry = tmp / prime[t];
ans.push(tmp % prime[t]);
t++;
num2.pop();
}
if(carry != 0){
ans.push(carry);
}
printf("%d", ans.top());
ans.pop();
while(!ans.empty()){
printf(",%d", ans.top());
ans.pop();
}
printf("\n");
}
}
京公网安备 11010502036488号