JavaScript中大數相加的解法
阿新 • • 發佈:2019-04-04
ring 余數 console 大數相加 car arr logs pre 函數參數
一、兩個大正整數字符串相加
在JavaScript中,數值類型滿足不了大數據容量計算,可以用字符串進行操作1 function add(strNum1, strNum2) { 2 // 將傳進來的數字/數字字符串調用toString方法轉換成字符串,並進行切割,專成數組 3 let splitNum1 = strNum1.toString().split(‘‘), 4 splitNum2 = strNum2.toString().split(‘‘) 5 6 // 判斷兩個數組的長度,進行值的互換,將splitNum1設置為最長的值,方便後續計算 7if (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]) + carry27 } 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中的坑JavaScript中大數相加的解法