压位高精度的写法
之前有单位高精度算法,但是计算一次的复杂度为 O(n) ,总共需要 O(n^2) 的复杂度 ( n 为数字位数)
如何加快速度呢?
以前,存数字数组里面只存着一个数字,所以加减都是一位一位地加,进位也是一位一位地实现
所以,我们尝试着将数字序列从以为变成多位
比如两位
我们就两位两位地存数字,运算时依然可以正常相加,但是相加的次数减半了;进位时,只需要将进位的数字除以 100 ,加到下一位就可以了
所以,如果我们压八位(保证 int 的情况),那么复杂度是六十四分之一 O(n^2) ,可以跑过 5*10^4 的 n
如,计算: 13134987124987+192837918479
传统做法:
Step 1: 分离数位
1 3 1 3 4 9 8 7 1 2 4 9 8 7 + 1 9 2 8 3 7 9 1 8 4 7 9
Step 2: 每位相加
1 3 1 3 4 9 8 7 1 2 4 9 8 7 + 1 9 2 8 3 7 9 1 8 4 7 9 ———————————————————————————————————————————— 1 3 2 12 8 17 11 14 10 3 12 13 15 16
Step 3: 进位
1 3 1 3 4 9 8 7 1 2 4 9 8 7 + 1 9 2 8 3 7 9 1 8 4 7 9 ———————————————————————————————————————————— 1 3 3 2 7 8 2 5 0 4 3 4 6 6
所以答案为 13327825043466
压位做法(压 4 位):
Step 1: 分离数位
13 1349 8712 4987 + 1928 3791 8479
Step 2: 相加
13 1349 8712 4987 + 1928 3791 8479 ———————————————————————————————— 13 3277 12503 13466
Step 3: 进位
13 1349 8712 4987 + 1928 3791 8479 ———————————————————————————————— 13 3278 2504 3466
所以答案为 13327825043466 ,和传统做法答案一样