高精度
核心思想:
模拟人的计算过程,依次对高精度的个、十、百、千位进行加减乘除模拟
step1: 高精度的存储
用数组从前往后的顺序依次存储高精度数字的低位到高位。原因在于可能进位或者借位在数组的末尾进行操作比较方便。
step2: 依次计算每一位数字,进(借)位 t
或者余数 r
初始化都是0, 注意结果前导0的处理
1.高精度加法 A + B
从低到高位计算 c[i] = (A[i] + B[i] + t) % 10
, 进位 t = (A[i] + B[i] + t) / 10
; 计算完之后如果 t
大于0,记得进位加到 c
数组最后。
2.高精度减法 A - B
(注意需要保证 A >= B
)
从低位到高位计算 c[i] = (A[i] - B[i] - t) >= 0 ? (A[i] - B[i] - t) % 10 : ((A[i] - B[i] - t) + 10) % 10
, 借位 t = (A[i] - B[i] - t) >= 0 ? 0 : 1
3.高精度乘法 A * b
(len(A) 几千位,b <= 9位数)
从低位到高位计算 c[i] = (A[i] * b) % 10
, 进位 t = (A[i] * b) / 10
; 计算完之后如果 t
大于0,记得把 t
的每一位加到 c
数组最后
4.高精度除法 A / b
(len(A) 几千位,b <= 9位数, 注意有商c和余数r)
(注意点高位到低位计算,计算完记得反转商)
从高位到低位计算, r = r * 10 + A[i], c[i] = r / b, r = r % b