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

C語言實現大整數乘法:竪式算法與字符串模擬完整實現

     編輯:關於C語言

算法思路:模擬手工竪式乘法

  1. 輸入兩個數字字符串 num1、num2(可超長)。
  2. 結果最大長度 = len1 + len2,分配 int 數組 res[len1+len2] 初始化 0。
  3. 雙層循環:num2 從低位到高位,每位乘以 num1 全部位,乘積累加到 res[i+j](i、j 為逆序下標)。
  4. 統一處理進位:遍歷 res,carry = res[k]/10,res[k] %= 10,res[k+1] += carry。
  5. 跳過最高位前導 0,逆序輸出字符。

完整代碼(註釋版)

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

char* big_multiply(const char* num1, const char* num2) { 
    int len1 = strlen(num1), len2 = strlen(num2); 
    int* res = (int*)calloc(len1 + len2, sizeof(int)); 

    for (int i = 0; i < len2; ++i) { 
        int n2 = num2[len2 - 1 - i] - '0'; 
        for (int j = 0; j < len1; ++j) { 
            int n1 = num1[len1 - 1 - j] - '0'; 
            res[i + j] += n1 * n2; 
        } 
    } 

    // 統一進位 
    for (int k = 0; k < len1 + len2 - 1; ++k) { 
        if (res[k] > 9) { 
            res[k + 1] += res[k] / 10; 
            res[k] %= 10; 
        } 
    } 

    // 跳過前導零 
    int idx = len1 + len2 - 1; 
    while (idx > 0 && res[idx] == 0) --idx; 

    char* str = (char*)malloc(idx + 2); 
    for (int i = 0; i <= idx; ++i) 
        str[i] = res[idx - i] + '0'; 
    str[idx + 1] = '\0'; 

    free(res); 
    return str; 
} 

int main() { 
    char a[1024], b[1024]; 
    printf("Enter first big integer: "); 
    scanf("%s", a); 
    printf("Enter second big integer: "); 
    scanf("%s", b); 
    char* r = big_multiply(a, b); 
    printf("Result: %s\n", r); 
    free(r); 
    return 0; 
}

關鍵細節

  • 用 int 數組暫存中間乘積,避免字符頻繁轉換開銷。
  • calloc 自動歸零,省去初始化循環。
  • 進位處理單獨一輪,邏輯清晰不易出錯。
  • 輸入驗證(非數字字符、空串)生產環境需補全。

複雜度分析

  • 時間:O(n*m),n,m 為兩數位數。
  • 空間:O(n+m)。
  • 優化方向:Karatsuba (O(n^1.585))、FFT (O(n log n)),適合極大整數(萬位以上)。

測試用例

Input:  12345678901234567890 
        98765432109876543210 
Output: 1219326311370217952237463801111263526900

總結

大整數運算核心是「數組模擬位運算 + 進位規範化」。乘法雙層循環 + 統一進位是最直觀穩健的實現,適合教學與中等長度(<10000 位)場景。本文整理自 51CTO 博客「C語言實現大數整數乘法」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved