這是一個僅 196 位元組的 C 程式,能計算超長整數乘法。它不使用額外陣列存儲中間結果,而是巧妙利用遞歸在呼叫堆疊上完成進位傳播,展示了「代碼高爾夫」的極致技巧。
#include <stdio.h>
char s[99], t[99];
int m, n;
void r(int i, int c) {
int j = 0, k = i;
while (k) c += s[j++] * t[k-- - 1];
if (i) r(i - 1, c / 10);
printf("%d", c % 10);
}
void main() {
gets(s); gets(t);
while (s[n]) s[n++] -= 48;
while (t[m]) t[m++] -= 48;
r(m + n - 1, 0);
}
r(i, c) 計算第 i 位的乘積加進位 c。迴圈 while(k) 實現 s[0]*t[i-1] + s[1]*t[i-2] + ... 的卷積求和。r(i-1, c/10) 先處理高位,返回時 printf("%d", c%10) 輸出低位,自然完成大數輸出順序。m, n 自動為 0,省去初始化語句。s[j++] * t[k-- -1] 一行完成陣列遍歷與索引運算。if(i) 取代 if(i>=0),利用 0 為假特性。此類代碼極難閱讀、維護,且使用 gets 存在緩衝區溢位風險。實際開發中請使用成熟的大數庫(如 GMP)或清晰的演算法實現。