【JS】不使用BigInt实现大整数相加
前言
JS中整数有存储范围,一旦超出这个范围则会丢失精度
,通过MAX_SAFE_INTEGER
可以看到JS中支持的最大的、安全的正整数为9007199254740991。
JS新类型BigInt
可以处理大整数运算,但这次不逃课,本文将尝试自行处理大整数相加,实际开发中还是更推荐直接使用BigInt
。
实现
接收两个可能为大整数的参数,求和。
为了确保不丢失精度,这里将参数和返回都设为字符串
。思路同小学数学,相加进位。
function sum(a, b) {const len = Math.max(a.length, b.length)let result = ""a = a.padStart(len, "0") // 不足最高位补0b = b.padStart(len, "0") // 不足最高位补0let carry = 0 // 进位for (let i = len - 1; i >= 0; i--) {const n = +a[i] + +b[i] + carrycarry = Math.floor(n / 10)result = (n % 10) + result}if (carry) result = "1" + resultreturn result
}