將大整數按十進制位拆分存入數組(低位在高下標),模擬手工豎式乘法:
arr[i-1] += arr[i] / 10; arr[i] %= 10
static int[] Multiply(int[] digits, int multiplier) {
// 逐位相乘
for (int i = 0; i < digits.Length; i++)
digits[i] *= multiplier;
// 統一進位處理(從個位向高位)
for (int i = digits.Length - 1; i > 0; i--) {
digits[i - 1] += digits[i] / 10;
digits[i] %= 10;
}
return digits;
}
digits[Length-1] 為個位),便於進位向低下標傳播/* 加法:對齊低位,逐位相加進位 */
static int[] Add(int[] a, int[] b) { ... }
/* 除法:試商法,從高位向低位 */
static int[] Divide(int[] dividend, int divisor, out int remainder) { ... }
/* 快速冪:二進制分解指數 */
static int[] Pow(int[] base, int exp) { ... }