#include <cstdio>
#include <cstring>
const int MAXN = 30;
int primes[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 }; //素数
int a[MAXN], b[MAXN], sum[MAXN]; //加数,加数,和
int acount, bcount, scount; //加数位数,加数位数,和位数
char c; //其他字符(逗号、空格、换行)
int main()
{
while (true)
{
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(sum, 0, sizeof(sum));
int i = 0;
while (scanf("%d%c", &a[i], &c)) //读取第一个加数
{
if (c == ' ')
break;
else
++i;
}
acount = i;
i = 0;
while (scanf("%d%c", &b[i], &c)) //读取第二个加数
{
if (c == '\n')
break;
else
++i;
}
bcount = i;
if (acount == 0 && bcount == 0 && a[0] == 0 && b[0] == 0)
break;
scount = (acount > bcount) ? acount : bcount;
for (int i = acount, j = 0; i >= 0; i--, j++) //加上第一个加数(低位在前)
sum[j] += a[i];
for (int i = bcount, j = 0; i >= 0; i--, j++) //加上第二个加数(低位在前)
sum[j] += b[i];
for (i = 0; i <= scount; i++) //依次进位
{
if (sum[i] >= primes[i])
{
sum[i] -= primes[i];
sum[i + 1]++;
}
}
if (sum[scount + 1] > 0) //最高位进位,总位数加1
++scount;
for (i = scount; i > 0; i--) //从后向前输出
printf("%d,", sum[i]);
printf("%d\n", sum[0]);
}
return 0;
}
继续加油。