偶然在刷算法的时候,遇到了BigInt类型数据的求和(不知道js也有BigInt类型数据)
介绍
JavaScript的十进制数字计算最长只有16位
这让我记起了当时与后端联调的时候所用过的BigInt转化的node_module,当时打印出来的是由数组和字符串组成BigInt参数。就好比 : [‘111111111111111’,‘222222222222222’,‘333’] 。
虽然忘记多少位为一组了,但是大体上不是15位,就是16位。考虑到假如两组16位的数据求和就会溢出,最大就可能达到17位,所以我选择使用15位。
开搓BigInt
首先写个BigInt数组转换
// 转化为BigInt数组
const bigIntFun = (str) => {
let i = 0
let sumArr = [...str].reverse().reduce((total, cur, index) => {
if (index % 15 === 0 && index / 15 !== 0) {
i++
}
if (!total[i]) {
total[i] = ''
}
total[i] += cur
return total
}, []).map(item => [...item].reverse().join('')).reverse()
let j = 0
while (sumArr[j] <= 0) {
j++
}
sumArr.splice(0, j)
return sumArr.map((item, i) => {
return i === 0 ? +item + '' : item
})
}
// a, b为两个字符串,随便写都行
let arrA = bigIntFun(a)
let arrB = bigIntFun(b)
然后开始计算