输入两个十六进制字符串,计算和差后输出十六进制字符串的问题请教。

已知应该使用int数组,先将字符串传入int数组,运算后再根据int数组输出字符串。

img

下面是16进制的加法

#include <stdio.h>
#define LEN 100
#define TODEC(x) ((x) >= 'A' ? (x) - 'A' + 10 : (x) - '0')

char a[LEN] = {0}, b[LEN] = {0}, c[LEN] = {0};
int lena, lenb;

char *add()
{
    int la = lena, lb = lenb, lc;
    int i, t;
    i = lc = la > lb ? la + 1 : lb + 1;
    while (la >= 0 && lb >= 0)
    {
        c[i] += TODEC(a[la]) + TODEC(b[lb]);
        if (c[i] >= 16)
        {
            c[i - 1] += 1;
            c[i] -= 16;
        }
        if (c[i] > 9)
            c[i] = c[i] - 10 + 'A';
        else
            c[i] += '0';

        la--, lb--, i--;
    }
    while (la >= 0)
    {
        c[i--] = a[la--];
    }
    while (lb >= 0)
    {
        c[i--] = b[lb--];
    }
    if (c[0] == 0)
    {
        int j;
        for (j = 0; j <= lc; j++)
            c[j] = c[j + 1];
    }
    return c;
}

int main()
{
    fgets(a, LEN, stdin);
    fgets(b, LEN, stdin);
    lena = strlen(a) - 2;
    lenb = strlen(b) - 2;
    printf("%s\n", add());

    return 0;
}