火星A+B
原题 HDU-1230
此题类似于大数A+B
读入两个不超过25位的火星正整数A和B,计算A+B。需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数。例如:地球上的10进制数2,在火星上记为“1,0”,因为火星个位数是2进制的;地球上的10进制数38,在火星上记为“1,1,1,0”,因为火星个位数是2进制的,十位数是3进制的,百位数是5进制的,千位数是7进制的……
Sample Input
1,0 2,1
4,2,0 1,2,0
1 10,6,4,2,1
0 0
Sample Output
1,0,1
1,1,1,0
1,0,0,0,0,0
#include<bits/stdc++.h>
using namespace std;
int main() {
int i,f,p[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,101};
char a[100],b[100];
while(1) {
char t;
int A[100]={0},B[100]={0},c[100]={0},m,n,l,y,x;
int v=0,g=0;
for(i=0;;i++) {
scanf("%d%c",&A[i],&t);
v++;
if(t!=',')
break;
}
for(i=0;; i++) {
scanf("%d%c",&B[i],&t);
g++;
if(t!=',')
break;
}
if(A[0]==0||B[0]==0)
break;
for(i=0; i<v/2; i++) {
swap(A[i],A[v-i-1]);
}
for(i=0; i<g/2; i++) {
swap(B[i],B[g-i-1]);
}
y=0;
x=0;
if(v>=g) {
for(i=0; i<v; i++) {
x=A[i]+B[i]+y;
y=x/p[i];
c[i]=x%p[i];
}
l=v;
} else {
for(i=0; i<g; i++) {
x=A[i]+B[i]+y;
y=x/p[i];
c[i]=x%p[i];
}
l=g;
}
if(y==1)
c[i]=1;
for(i=l-1+y; i>0; i--) {
printf("%d,",c[i]);
}
printf("%d\n",c[0]);
}
}