首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言處理超長整數 (≤128 位) 的加減乘除:大整數庫實現思路

     編輯:C 語言問答

核心思想:字元陣列/位元陣列模擬手算

內建型別 (long long 64 位) 無法直接存儲 128 位整數,需自行實現大整數結構。

資料結構設計

#define MAX_DIGITS 40 // 128 位 ≈ 39 位十進位數字

typedef struct {
    int digits[MAX_DIGITS]; // 每元素存 0-9 (或 0-9999 進位制)
    int len;                // 有效位數
    int sign;               // 1 正, -1 負
} BigInt;

關鍵運算實現要點

  • 加減法:逐位對齊、進位/借位、修正符號。
  • 乘法:模擬豎式乘法 O(n²);大規模可用 Karatsuba (O(n^1.585)) 或 FFT (O(n log n))。
  • 除法:試商法 (長除法) 或 Newton-Raphson 迭代求倒數再乘。
  • 輸入/輸出:字串解析 → 內部表示;內部表示 → 字串列印。

推薦現成庫 (生產環境首選)

教學用極簡加法範例 (十進位制)

void big_add(const BigInt *a, const BigInt *b, BigInt *res)
{
    int carry = 0, i = 0;
    for (; i < a->len || i < b->len || carry; i++) {
        int da = i < a->len ? a->digits[i] : 0;
        int db = i < b->len ? b->digits[i] : 0;
        int sum = da + db + carry;
        res->digits[i] = sum % 10;
        carry = sum / 10;
    }
    res->len = i;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
庫語言特點
GMP (GNU MP)C工業級、極致效能、支援任意精度整數/有理數/浮點
OpenSSL BIGNUMC密碼學優化、廣泛部署
libtommathC單檔頭、易嵌入、公有領域
Boost.MultiprecisionC++頭檔唯、表達式模板、型別安全