纯模拟,恶心死我了...
#include <cstdio>
#include <cstring>
int isP[30] = {0,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};
int main()
{
int a[100],b[100],c[100];
while(true)
{
memset(a,0,sizeof a);
memset(b,0,sizeof b);
memset(c,0,sizeof c);
int i = 0;
int j;
int aCnt = 0;
int bCnt = 0;
int cCnt = 1;
char ci;
while(scanf("%d%c",&a[i],&ci))
{
if(ci == ' ')
break;
else i++;
}
aCnt = i + 1;
i = 0;
while(scanf("%d%c",&b[i],&ci))
{
if(ci == '\n')
break;
else i++;
}
bCnt = i + 1;
if(aCnt == 1 && bCnt == 1 && a[0] == 0 && b[0] == 0)
break;
int carry = 0;
for(i = aCnt - 1,j = bCnt - 1; i >= 0 && j >= 0; --i,--j)
{
c[cCnt] = (a[i] + b[j] + carry) % isP[cCnt];
carry = (a[i] + b[j] + carry) / isP[cCnt];
cCnt++;
}
if(i < 0 && j < 0)
{
while(carry)
{
c[cCnt] = carry % isP[cCnt];
carry /= isP[cCnt];
cCnt++;
}
}
while(i >= 0)
{
c[cCnt] = (a[i] + carry) % isP[cCnt];
carry = (a[i] + carry) / isP[cCnt];
cCnt++;
--i;
}
while(j >= 0)
{
c[cCnt] = (b[j] + carry) % isP[cCnt];
carry = (b[j] + carry) / isP[cCnt];
cCnt++;
--j;
}
while(carry)
{
c[cCnt] = carry % isP[cCnt];
carry /= isP[cCnt];
cCnt++;
}
for(i = cCnt - 1; i >= 1; --i)
{
if(i != 1)
printf("%d,",c[i]);
else
printf("%d\n",c[i]);
}
}
return 0;
}