/*
個人感覺如果進制轉換的話太麻煩,直接模擬加法,不同位數采用不同的進制加法。。。
/但是還是WA了兩次,沒有處理好余數的問題,當不能進位時。
2013-04-23
*/
[cpp]
#include"stdio.h"
#include"string.h"
#include"math.h"
int prime[25],cnt;
void fun()
{
int i,j,k,f;
cnt=2;
prime[0]=2;
prime[1]=3;
for(i=4;i<=1000;i++)
{
f=1;
k=(int)sqrt(i);
for(j=2;j<=k;j++)
{
if(i%j==0)
{
f=0;break;
}
}
if(f)prime[cnt++]=i;
if(cnt==25)break;
}
}
int main()
{
int l1,l2;
int i,j,k;
int t1,t2,t;
int a[26],b[26],c[26];
char s1[101],s2[101];
fun();
while(scanf("%s %s",s1,s2)==2)
{
if(strcmp(s1,"0")==0||strcmp(s2,"0")==0)break;
l1=strlen(s1);
l2=strlen(s2);
//為後面處理最後一位的數做准備
s1[l1]=',',s1[++l1]=0;
s2[l2]=',',s2[++l2]=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
//A
t1=0;
t=0;
for(i=0;s1[i];i++)
{
if(s1[i]==',')
{
a[t1++]=t;
t=0;
}
else if(s1[i]>='0'&&s1[i]<='9')
{
t=t*10+s1[i]-'0';
}
}
//需要逆置一下。。
for(i=0,j=t1-1;i<j;i++,j--)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
//B
t2=0;
t=0;
for(i=0;s2[i];i++)
{
if(s2[i]==',')
{
b[t2++]=t;
t=0;
}
else if(s2[i]>='0'&&s2[i]<='9')
{
t=t*10+s2[i]-'0';
}
}
for(i=0,j=t2-1;i<j;i++,j--)
{
t=b[i];
b[i]=b[j];
b[j]=t;
}
memset(c,0,sizeof(c));
i=0;
int carry;
carry=0;
while(i<t1||i<t2)
{
t=a[i]+b[i];
t+=carry;
if(t>=prime[i])
{
c[i]=t%prime[i];
carry=t/prime[i];
}
else
{
c[i]=t;
carry=0;//剛開始沒有寫,WA了一次
}
i++;
}
if(carry!=0)//
c[i++]=carry;
for(j=i-1;j>0;j--)
printf("%d,",c[j]);
printf("%d\n",c[0]);
}
return 0;
}
#include"stdio.h"
#include"string.h"
#include"math.h"
int prime[25],cnt;
void fun()
{
int i,j,k,f;
cnt=2;
prime[0]=2;
prime[1]=3;
for(i=4;i<=1000;i++)
{
f=1;
k=(int)sqrt(i);
for(j=2;j<=k;j++)
{
if(i%j==0)
{
f=0;break;
}
}
if(f)prime[cnt++]=i;
if(cnt==25)break;
}
}
int main()
{
int l1,l2;
int i,j,k;
int t1,t2,t;
int a[26],b[26],c[26];
char s1[101],s2[101];
fun();
while(scanf("%s %s",s1,s2)==2)
{
if(strcmp(s1,"0")==0||strcmp(s2,"0")==0)break;
l1=strlen(s1);
l2=strlen(s2);
//為後面處理最後一位的數做准備
s1[l1]=',',s1[++l1]=0;
s2[l2]=',',s2[++l2]=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
//A
t1=0;
t=0;
for(i=0;s1[i];i++)
{
if(s1[i]==',')
{
a[t1++]=t;
t=0;
}
else if(s1[i]>='0'&&s1[i]<='9')
{
t=t*10+s1[i]-'0';
}
}
//需要逆置一下。。
for(i=0,j=t1-1;i<j;i++,j--)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
//B
t2=0;
t=0;
for(i=0;s2[i];i++)
{
if(s2[i]==',')
{
b[t2++]=t;
t=0;
}
else if(s2[i]>='0'&&s2[i]<='9')
{
t=t*10+s2[i]-'0';
}
}
for(i=0,j=t2-1;i<j;i++,j--)
{
t=b[i];
b[i]=b[j];
b[j]=t;
}
memset(c,0,sizeof(c));
i=0;
int carry;
carry=0;
while(i<t1||i<t2)
{
t=a[i]+b[i];
t+=carry;
if(t>=prime[i])
{
c[i]=t%prime[i];
carry=t/prime[i];
}
else
{
c[i]=t;
carry=0;//剛開始沒有寫,WA了一次
}
i++;
}
if(carry!=0)//
c[i++]=carry;
for(j=i-1;j>0;j--)
printf("%d,",c[j]);
printf("%d\n",c[0]);
}
return 0;
}