You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C语言中实现超大无符号整数加法的方法

解决C语言中超大无符号整数加法的问题

你的问题很典型——C语言里的unsigned long long类型最大只能表示到18446744073709551615(约1.8×10¹⁹),远小于10⁹⁸,所以直接用整数类型存储肯定会溢出,必须用字符串模拟手工加法的思路来实现。

核心思路

手工加法的逻辑我们都熟悉:从最低位开始逐位相加,处理进位,最后把结果倒过来。对应到代码里就是:

  • 反转两个输入字符串,让最低位在数组的起始位置,方便从左到右遍历相加
  • 逐位计算当前位的和,加上进位,得到当前位的数字和新的进位
  • 处理完所有位后,如果还有剩余进位,要追加到结果里
  • 最后反转结果字符串,得到正确的顺序

完整代码实现

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

// 反转字符串的辅助函数
void reverse(char *str) {
    int len = strlen(str);
    for (int i = 0; i < len / 2; i++) {
        char temp = str[i];
        str[i] = str[len - i - 1];
        str[len - i - 1] = temp;
    }
}

int main() {
    // 两个10^98的数相加最多是100位,所以数组开足够大的空间
    char a[101], b[101], result[102] = {0};
    int len_a, len_b, max_len, carry = 0;

    // 循环读取输入的两个超大数(字符串形式)
    while (scanf("%s %s", a, b) == 2) {
        len_a = strlen(a);
        len_b = strlen(b);
        max_len = len_a > len_b ? len_a : len_b;
        carry = 0;

        // 反转字符串,方便从低位开始相加
        reverse(a);
        reverse(b);

        // 逐位相加处理
        for (int i = 0; i < max_len; i++) {
            // 短字符串超出长度的位用0补全
            int digit_a = (i < len_a) ? (a[i] - '0') : 0;
            int digit_b = (i < len_b) ? (b[i] - '0') : 0;
            int sum = digit_a + digit_b + carry;

            // 当前位的数字是sum%10,进位是sum/10
            result[i] = (sum % 10) + '0';
            carry = sum / 10;
        }

        // 处理最后剩余的进位(比如999+1=1000的情况)
        if (carry != 0) {
            result[max_len] = carry + '0';
            max_len++;
        }

        // 反转结果得到正确顺序
        reverse(result);

        // 输出结果
        printf("%s\n", result);

        // 重置结果数组,准备下一次计算
        memset(result, 0, sizeof(result));
    }

    return 0;
}

代码细节说明

  1. 反转字符串:reverse函数把输入字符串反转,比如"123"变成"321",这样我们可以从索引0开始处理最低位,完全贴合手工加法的顺序。
  2. 补位处理:遍历到两个字符串的最长长度,短字符串超出长度的位用0代替,避免数组越界的同时保证加法逻辑统一。
  3. 进位处理:每一位相加后,当前位保留sum%10的结果,进位则是sum/10,最后如果还有未处理的进位,直接追加到结果末尾。
  4. 结果重置:每次计算完成后清空结果数组,确保下一次计算不受上一次的影响。

这个代码可以轻松处理0到10⁹⁸之间的任意无符号整数加法,不会出现溢出问题。

内容的提问来源于stack exchange,提问作者Keerthana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:32:54