注解
1、首先打素数表,前25个素数用一个数组保存。
2、处理输入格式,把按逗号分隔的输入数据,处理成int数组保存起来。
3、每一位按不同的进制相加,注意进位。
4、按给定格式输出,不要有多余空格和逗号。
代码
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
const int maxn = 25;
int prime[maxn]= {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 A[maxn+1], B[maxn+1];
int ans[maxn+1];
string s1, s2;
void prework(int tmp[], string s) {
int cnt = 0;
int now = 0;
int digit = 0;
for(int i=s.length()-1; i>=0; i--) {
if(s.at(i)==',') {
tmp[cnt++] = now;
now = 0;
digit = 0;
} else {
now = now + (s.at(i)-'0')*pow(10, digit);
digit++;
}
}
tmp[cnt++] = now;
}
void mainwork() {
memset(ans, 0, sizeof(ans));
for(int i=0; i<maxn; i++) {
if(A[i]+B[i]+ans[i] >= prime[i]) {
ans[i+1]++;
}
ans[i] = (A[i]+B[i]+ans[i]) % prime[i];
}
}
void print() {
int flag = 0;
for(int i=maxn; i>=0; i--) {
if(ans[i] && !flag) {
cout<<ans[i];
flag = 1;
} else if(flag) {
cout<<","<<ans[i];
}
}
cout<<endl;
}
int main() {
cin>>s1>>s2;
while(s1.compare("0") && s2.compare("0")) {
memset(A, 0, sizeof(A));
prework(A, s1);
memset(B, 0, sizeof(B));
prework(B, s2);
mainwork();
print();
cin>>s1>>s2;
}
return 0;
}