您的位置:首页 > 其它

ZOJ Problem Set - 1205 Martian Addition

2013-09-16 16:43 344 查看
一道简单题,简单的20进制加减法,我这里代码写的不够优美,还是可以有所改进,不过简单题懒得改了。。。

#include <stdio.h>
#include <string.h>

int invert(char c)
{
if(c<97)
return c-48;
else
return c-87;
}

char reinvert(int a)
{
if(a<10)
return a+48;
else
return a+87;
}

char add(char a1,char a2,int *c)
{
int t1,t2,sum;
t1=invert(a1);
t2=invert(a2);
sum=t1+t2+*c;
if(sum<20)
{
*c=0;
}
else
{
sum-=20;
*c=1;
}
return reinvert(sum);
}

void inversion(char *a)
{
int len=strlen(a);
for(int i=0,j=len-1;i<=j;i++,j--)
{
char c=a[i];
a[i]=a[j];
a[j]=c;
}
}

int main()
{
char a1[120],a2[120];
while(scanf("%s%s",a1,a2)!=EOF)
{
inversion(a1);
inversion(a2);
int len1=strlen(a1),len2=strlen(a2),i;
int c=0;
for(i=0;i<len1&&i<len2;i++)
a1[i]=add(a1[i],a2[i],&c);

if(len1>len2)
{
for(;i<len1;i++)
a1[i]=add(a1[i],'0',&c);
if(c!=0)
a1[i++]='1';
a1[i]='\0';
len1=strlen(a1);
}
else if(len1==len2)
{
if(c!=0)
{    a1[i]='1';
len1++;
}
}
else
{
for(;i<len2;i++)
a1[i]=add(a2[i],'0',&c);
if(c!=0)
a1[i++]='1';
a1[i]='\0';
len1=strlen(a1);
}

for(i=len1-1;i>=0;i--)
printf("%c",a1[i]);
printf("\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: