hdu 1230(火星A+B,进制)
/*
个人感觉如果进制转换的话太麻烦,直接模拟加法,不同位数采用不同的进制加法。。。
/但是还是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++ ,