JavaScript中大數相加的解法


一、兩個大正整數字符串相加

在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中的坑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM