http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=1163

20进制的数求和,本来挺简单的题目,可惜wa了好多次才找出问题。不单要处理前导0,还要处理0+0=0的情况。考虑欠缺。

代码如下

#include”stdio.h”
#include”string.h”
int main()
{
char a[101],b[101],c[101],t;
int x[101];
int f,i,k,o,j,flag=0,p,sum=0,aa,g,bb;

while(scanf(“%s”,a)!=EOF&&scanf(“%s”,b)!=EOF)
{
memset(x,o,sizeof(x));
p=f=0;flag=0;sum=0;
if(strlen(a)<strlen(b))
{
strcpy(c,a);
strcpy(a,b);
strcpy(b,c);
}

for(i=0;i<strlen(a)/2;i++)
{
t=a[i];a[i]=a[strlen(a)-i-1];a[strlen(a)-i-1]=t;
}
for(i=0;i<strlen(b)/2;i++)
{
t=b[i];b[i]=b[strlen(b)-i-1];b[strlen(b)-i-1]=t;
}

for(i=0;i<strlen(a);i++)
{
if(a[i]>=’a’&&a[i]<=’z’)
aa=a[i]-87;
else
aa=a[i]-‘0′;
if(i<strlen(b))
{
if(b[i]>=’a’&&b[i]<=’z’)
bb=b[i]-87;
else
bb=b[i]-‘0’;
}

else
bb=0;
sum=aa+bb+flag;
g=sum%20;
if(i==strlen(a)-1)
{
x[i]=g;/* printf(“%d\n”,g);*/
if(sum/20)
{
f=1; x[i+1]=sum/20;/* printf(“%d\n”,sum/20);*/
}
}

else
{
x[i]=g; /*  printf(“%d\n”,g);*/
}
flag=sum/20;
}

if(f==1)
i=i;
else
i=i-1;
o=i;
if(o==0)
printf(“%d”,x[i]);
else
for(i=o;i>=0;i–)
{
if(p==0)
{
if(x[i]!=0)
{
p=1;
}
if(x[i]==0)
{p=0;}

}

if(p==1)
{
if(x[i]<=9)
printf(“%d”,x[i]);
else if(x[i]==10)
printf(“a”);
else if(x[i]==11)
printf(“b”);
else if(x[i]==12)
printf(“c”);
else if(x[i]==13)
printf(“d”);
else  if(x[i]==14)
printf(“e”);
else   if(x[i]==15)
printf(“f”);
else  if(x[i]==16)
printf(“g”);
else if(x[i]==17)
printf(“h”);
else if(x[i]==18)
printf(“i”);
else  if(x[i]==19)
printf(“j”);
}

}
printf(“\n”);

}
return 0;

}

 

发表评论

电子邮件地址不会被公开。

Post Navigation