题目描述

如何实现两个非常大的数字(已经超出了Number范围)的加法运算。

注意由于这两个已经超过了Number范围,因此不能用Number存,这里我们选择使用字符串存储。

思路

我们只要将两个数字前面补0至相同的长度,然后从低位到高位进行相加, 同时用一个变量记录进位的信息即可。

 

值得注意的是,最后需要判断一下进位是否是0,如果不是0需要在最前面添加一个1。

参考代码

  1. function bigNumberSum(a, b) {

  2. let cur = 0;

  3. while (cur < a.length || cur < b.length) {

  4. if (!a[cur]) {

  5. a = "0" + a;

  6. } else if (!b[cur]) {

  7. b = "0" + b;

  8. }

  9. cur++;

  10. }

  11.  

  12. let curried = 0;

  13. const res = [];

  14.  

  15. for (let i = a.length - 1; i > -1; i--) {

  16. const sum = curried + +a[i] + +b[i];

  17. if (sum > 9) {

  18. curried = 1;

  19. } else {

  20. curried = 0;

  21. }

  22. res[i] = sum % 10;

  23. }

  24. if (curried === 1) {

  25. res.unshift(1);

  26. }

  27.  

  28. return res.join("");

  29. }