超大数相加问题(浅显易懂)

481 阅读1分钟

一. 超大数相加问题?

js超大整数相加 js和任何一门语言一样,对其数值的范围有限制。 如果我们想要对一个超大的整数 (> Number.MAX_SAFE_INTEGER)进行加法运算,但是又想输出一般形式,那么使用 + 是无法达到的,一旦数字超过 Number.MAX_SAFE_INTEGER 数字会被立即转换为科学计数法,并且数字精度相比以前将会有误差。在此时就需要自己实现一套加法算法。

function add(str1, str2) {
   if (Number(str1) > Number(str2)) {
     var len = str1;
   } else {
     var len = str2;
   }
   var len1 = str1.length;
   var len2 = str2.length;
   var temp = 0;
   var total = [];

   for (let i = 0; i < len.length; i++) {
     temp += Number(str1.charAt(len1 - i - 1)) + Number(str2.charAt(len2 - i - 1));
     if (temp > 9) {
       // 如果两数相加大于9,则把余数放进total
       // temp=1 跟下一对相加
       total.unshift(temp % 10);
       temp = 1;
     } else {
       // 如果两数相加小于10,则把余数直接放进total
       total.unshift(temp);
       temp = 0;
     }
   }
   total = total.join("");
   return total
 }
 const num1 = '111111111111111111111111111111111111111'
 const num2 = '222222222222222222222222222222222222222'
 document.write(add(num1, num2));   //结果为333333333333333333333333333333333333333