num1、num2(可超長)。len1 + len2,分配 int 數組 res[len1+len2] 初始化 0。num2 從低位到高位,每位乘以 num1 全部位,乘積累加到 res[i+j](i、j 為逆序下標)。res,carry = res[k]/10,res[k] %= 10,res[k+1] += carry。#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)。O(n^1.585))、FFT (O(n log n)),適合極大整數(萬位以上)。Input: 12345678901234567890
98765432109876543210
Output: 1219326311370217952237463801111263526900
大整數運算核心是「數組模擬位運算 + 進位規範化」。乘法雙層循環 + 統一進位是最直觀穩健的實現,適合教學與中等長度(<10000 位)場景。本文整理自 51CTO 博客「C語言實現大數整數乘法」。