hdu 1230(火星A+B,进制) (一)

2014-11-24 02:51:57 · 作者: · 浏览: 3


/*

个人感觉如果进制转换的话太麻烦,直接模拟加法,不同位数采用不同的进制加法。。。

/但是还是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 {
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 {
t=b[i];
b[i]=b[j];
b[j]=t;
}


memset(c,0,sizeof(c));
i=0;
int carry;
carry=0;
while(i {
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 {
t=a[i];
a[i]=a[j];