大数求和(溢出问题)

400 阅读1分钟

求和:11111111111111111111111+9999999999999999999999999

方法一:

 function add(num1, num2) {
      num1+='';
      num2+='';
      if (num1.length > num2.length) {
        num2 = num2.padStart(num1.lengthh + 1, '0')
        num1 = num1.padStart(num1.lengthh + 1, '0')
      } else {
        num1 = num1.padStart(num2.length + 1, '0')
        num2 = num2.padStart(num2.length + 1, '0')
      }
      var bar = 0;
      var sum = '';
      var s = 0;
      for (let i = num1.length - 1; i >= 0; i--) {
        bar = parseInt(num1[i]) + parseInt(num2[i]) + s;
        if (bar > 9) {
          s = 1;
          bar = bar % 10;
          sum = bar + sum;
        } else {
          sum = bar + sum;
          s = 0;
        }
      }
      if (sum[0] == '0') {
        return sum.slice(1);
      } else {
        return sum;
      }
    }
    var aaa = add(11111111111111111111111,9999999999999999999999999);
    console.log(aaa);

方法二:

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
    }
    document.write(add(
      "11111111111111111111111",
      "9999999999999999999999999"
    ));