今天在leetcode上面作題目,有一道數組形式的整數加法運算,原本覺得還蠻簡單的,想着直接將數組先轉化爲String類型,而後直接相加就好,數組
代碼以下: code
var addToArrayForm = function(A, K) {
let result = A.toString().replace(/,/g,'')
let c = String(+result+K)
let arr = [...c]
return arr
};orm
結果驗證沒有經過:addToArrayForm ([1,2,6,3,0,7,1,7,1,9,7,5,6,6,4,4,0,0,6,3] ,516);leetcode
開始怎麼也沒有找到問題在哪裏,還以爲本身的邏輯沒毛病,後來仔細檢查才發現原來Number類型有一個最大範圍和最小範圍,能夠使用性Number.MAX_VALUE , Number.MIN_VALUE屬性進行查看,字符串
是正負2的53次方,超出最大範圍後精確性就會下降,此時若是須要運算的話能夠考慮使用字符串的方式進行,通過後期思考後,it
修改過的代碼以下:io
var addToArrayForm = function(A, K) {
var ik = String(K).split('');
var maxLength = Math.max(A.length,ik.length);
var mow = new Array(maxLength)
for(let i =1;i<maxLength+1;i++) {
let r1 = +A[A.length-i]||0,r2=+ik[ik.length-i]||0
let result = r1+r2+(mow[mow.length-i]||0);
mow[mow.length-i] = result
if (mow[mow.length-i] >= 10){
mow[mow.length-i] = result-10
if(mow.length-i == 0 ){
mow.unshift(1)
}else {
mow[mow.length-i-1] = (mow[mow.length-i-1] || 0)+1
}
}
}
return mow
};function