一、两个大正整数字符串相加
在JavaScript中,数值类型满足不了大数据容量计算,可以用字符串进行操作
1 function add(strNum1, strNum2) { 2 // 将传进来的数字/数字字符串调用toString方法转换成字符串,并进行切割,专成数组 3 let splitNum1 = strNum1.toString().split(''), 4 splitNum2 = strNum2.toString().split('') 5 6 // 判断两个数组的长度,进行值的互换,将splitNum1设置为最长的值,方便后续计算 7 if (splitNum1.length < splitNum2.length) { 8 let temp = splitNum1 9 splitNum1 = splitNum2 10 splitNum2 = temp 11 } 12 13 // carry: 进位值; currentNum: 相加之后,除以10的余数; sum: 相加的值 14 let len1 = splitNum1.length, 15 len2 = splitNum2.length, 16 carry = 0, 17 currentNum = 0, 18 sum = 0 19 20 // len1递减到1之后,循环体中的len1 - 1 = 0 即可拿到下标为零的数组元素, 21 // 所以这里条件是 大于 0,下面len2 > 0 同理 22 while (len1 > 0) { 23 if (len2 > 0) { 24 sum = parseInt(splitNum1[len1 - 1]) + parseInt(splitNum2[len2 - 1]) + carry 25 } else { 26 sum = parseInt(splitNum1[len1 - 1]) + carry 27 } 28 carry = Math.floor(sum / 10) // 进位数值 29 currentNum = sum % 10 // 取余数,作为当前位置的数值 30 splitNum1[len1 - 1] = currentNum // 设置当前值 31 32 // 相加之后,数值长度都递减 33 len1-- 34 len2-- 35 } 36 // 判断是否还有进位 37 if (carry) { 38 splitNum1.unshift(1) 39 } 40 return splitNum1.join('') 41 } 42 let result = add(9527, 2019) 43 44 console.log('result :', result) // result : 11546
备注:
在做大数相加,突然想到平时使用 数字.toString 方法会报错,
但是作为函数参数传进来,直接调用toString方法却不会报错,
上网搜索了下原因,记录了下来,传送门:Number和toString中的坑