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

C语言bigint使用指南:基于libtomath库的大整数运算实现示例

问题原因

C语言内置的long类型最多仅支持64位有符号整数,取值范围为-9223372036854775808 ~ 9223372036854775807,你给出的整数字面量远超出该范围,因此触发编译报错。同时原代码中long b = 2*b;存在未定义行为,变量b未初始化就参与运算,下面的方案已修正为计算b = 2*a。

方案1:使用LibTomMath库实现

第一步:安装依赖

  • Debian/Ubuntu 系统执行:sudo apt install libtommath-dev
  • RHEL/CentOS 系统执行:sudo yum install libtommath-devel
  • 其他系统可直接下载源码编译安装。

第二步:修改后代码

#include <stdio.h>
#include <tommath.h>

int main() {
    // 定义大整数变量
    mp_int a, b;
    // 初始化大整数结构
    mp_init(&a);
    mp_init(&b);

    // 从字符串读取大数(10进制)
    mp_read_radix(&a, "123456789123456789123456789123456789", 10);
    // 计算 b = a * 2
    mp_mul_d(&a, 2, &b);

    // 输出结果
    mp_print(&a, stdout);
    printf("\n");
    mp_print(&b, stdout);
    printf("\n");

    // 释放大整数占用的资源
    mp_clear(&a);
    mp_clear(&b);
    return 0;
}

第三步:编译运行

执行编译命令:gcc main.c -o bigint_calc -ltommath
运行生成的可执行文件即可看到输出结果。

方案2:其他可选实现

使用GNU GMP库(更通用的大整数库)

GMP库性能更优,生态更完善,适合复杂大整数运算场景,示例代码如下:

#include <stdio.h>
#include <gmp.h>

int main() {
    mpz_t a, b;
    mpz_init(a);
    mpz_init(b);

    mpz_set_str(a, "123456789123456789123456789123456789", 10);
    mpz_mul_ui(b, a, 2);

    gmp_printf("%Zd\n%Zd\n", a, b);

    mpz_clear(a);
    mpz_clear(b);
    return 0;
}

编译命令:gcc main.c -o bigint_calc -lgmp

自研简易大整数实现

如果不想引入第三方依赖,可使用字符数组/整形数组存储大整数的每一位,自行实现加减乘除运算逻辑,仅适合需求简单的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:27:03