压位高精度的写法

压位高精度的写法

之前有单位高精度算法,但是计算一次的复杂度为 O(n) ,总共需要 O(n^2) 的复杂度 ( n 为数字位数)

如何加快速度呢?

以前,存数字数组里面只存着一个数字,所以加减都是一位一位地加,进位也是一位一位地实现

所以,我们尝试着将数字序列从以为变成多位

比如两位

我们就两位两位地存数字,运算时依然可以正常相加,但是相加的次数减半了;进位时,只需要将进位的数字除以 100 ,加到下一位就可以了

所以,如果我们压八位(保证 int 的情况),那么复杂度是六十四分之一 O(n^2) ,可以跑过 5*10^4 的 n

如,计算: 13134987124987+192837918479

传统做法:

Ste1: 分离数位

  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

Ste2: 每位相加

  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

Ste3: 进位

  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 ,和传统做法答案一样

猜你喜欢

转载自www.cnblogs.com/zengpeichen/p/10943083.html