ZOJ Problem Set - 1205 Martian Addition

本文详细介绍了如何通过代码实现简单20进制加减法,并探讨了优化代码的策略。包括使用字符数组进行运算、实现字符到数值的转换、数值到字符的转换以及加减运算的逻辑处理。通过实例展示了如何通过函数封装来提升代码的可读性和复用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一道简单题,简单的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;
}

 

转载于:https://www.cnblogs.com/xlturing/p/3324533.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值