4 条题解

  • -1
    @ 2023-7-18 16:13:56
    #include <iostream>
    using namespace std;
    const int Maxn=100;
    int a[Maxn],b[Maxn],c[Maxn];
    int lena, lenb, lenc, t;
    int main()
    {
        string s1,s2;
        cin>>s1>>s2;        //s1,s2为十六进制字符串值,如:s1=(B90)H, s2=(80)H
        lena=s1.length()-1; lenb=s2.length()-1; //lena: 数据a的最高权位,对应数值a实际存储下标:[0..lena]
        lenc=max(lena, lenb)+1;                 //lenc: 数据a+b, 产生结果c的最大可能权位,实际也可能是lenc-1
        for(int i=0; i<=lena; i++){             //1. 将s1字符串转存入数组a[]中, 考虑到高位可以拓展, 因此最低位放在0位置
            if('0'<=s1[i] and s1[i]<='9') t=s1[i]-48;
            else t=s1[i]-'A'+10;
            a[lena-i]=t;
        }
        for(int i=0; i<=lenb; i++){
            if('0'<=s2[i] and s2[i]<='9') t=s2[i]-48;
            else t=s2[i]-'A'+10;
            b[lenb-i]=t;
        }
        for(int i=0; i<=lenc; i++){             //2. 将数据a与数据b按对应位置相加
            c[i]=a[i]+b[i];
        }
        for(int i=0; i<=lenc; i++){             //3. 将各个位置数据, 从低位到高位, 依次整理成16进制数值(0..15)
            c[i+1]+=c[i]/16;
            c[i]%=16;
        }
        if(c[lenc]==0) lenc--;                  //   最高位lenc值为0, 则不存在,进行退位
        for(int i=lenc; i>=0; i--){             //4. 从高位到低位, 依次输出高精度数据c[lenc..0]
            if(c[i]>=10){printf("%c",c[i]+55);}
            else{printf("%d",c[i]);}
        }
        return 0;
    }
    

    信息

    ID
    98
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    354
    已通过
    84
    上传者