c - 添加或减去表示为字符串的两个数字,而不使用 int、double、long、float 等

标签 c

我对这个问题的作业已经通过,我想我在代码的某些部分使用数字数据类型完全误解了这个问题。所以我只是好奇如何在不使用数字数据类型的情况下解决加/减两个以字符串表示的数字的问题。对于数值数据类型,我指的是 int、double、long 等,所有内容都需要保持字符串形式。

最佳答案

这是一个函数,它将字符串格式的数字添加到 char 数组中,假设足够大并且与 ab:

char *add_numbers(char *dest, const char *a, const char *b) {
    size_t lena = strlen(a);
    size_t lenb = strlen(b);
    size_t len = lena > lenb ? lena + 1 : lenb + 1;
    char carry = 0;        

    dest[len] = '\0';
    while (lena > 0 && lenb > 0) {
        char digit = a[--lena] - '0' + b[--lenb] + carry;
        carry = 0;
        if (digit > '9') {
            carry = 1;
            digit -= 10;
        }
        dest[--len] = digit;
    }
    if (lenb > 0) {
        lena = lenb;
        a = b;
    }
    while (lena > 0) {
        char digit = a[--lena] + carry;
        carry = 0;
        if (digit > '9') {
            carry = 1;
            digit -= 10;
        }
        dest[--len] = digit;
    }
    if (carry) {
        dest[--len] = '1';
    } else {
        for (;; len++) {
            dest[len - 1] = dest[len];
            if (dest[len] == '\0')
                break;
        }
    }
    return dest;
}

没有intdoublelongfloat。数字不转换为数字格式,一次一位进行运算,以字符串格式进行操作。

关于c - 添加或减去表示为字符串的两个数字,而不使用 int、double、long、float 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40708444/

相关文章:

c - 学习集 : How do I place the asterisks and ampersands on function arguments and function calls?

C - 如何输入字符串并将其插入到字符串数组中?

C程序初学者

c - 用户输入以创建链接列表

c - 使用声明引用参数时出错

c - WM_CHAR 不适用于 notepad.exe

c - 如何产生以下输出?

c - 在 Xcode 上打开函数 C "file not found"但终端可以工作

c - malloc 有效,cudaHostAlloc 段错误?

c - 十六进制 sha1 输出错误