前言
请实现一个函数 bigNumberAdd(num1, num2),用于将两个大数相加。这两个大数以字符串的形式表示,并且它们的长度可能超过JavaScript中Number类型的最大安全整数限制(即 Number.MAX_SAFE_INTEGER)。
函数应返回一个新的字符串,表示两个大数相加的结果。
示例:
bigNumberAdd("12345678901234567890", "98765432109876543210");
// 应返回 "11111111111111111100"
bigNumberAdd("99999999999999999999", "1");
// 应返回 "100000000000000000000"
bigNumberAdd("1000", "0");
// 应返回 "1000"
提示:
- 你可以考虑将字符串从右到左(即从低位到高位)进行遍历,逐位相加,并处理进位问题。
- 注意处理两个字符串长度不一致的情况。
当所有位都遍历完并且没有进位时,结束算法。如果还有进位,需要将进位添加到结果的最高位。
实现
function bigNumberAdd(num1, num2) {
let carry = 0; // 使用carry代替flag,更清晰地表示进位
let result = [];
let maxLength = Math.max(num1.length, num2.length);
// 确保两个字符串长度相同,通过前置补零
num1 = num1.padStart(maxLength, '0');
num2 = num2.padStart(maxLength, '0');
// 从低位到高位逐位相加
for (let i = maxLength - 1; i >= 0; i--) {
let sum = parseInt(num1[i]) + parseInt(num2[i]) + carry;
carry = Math.floor(sum / 10); // 计算进位
result.unshift(sum % 10); // 取个位数作为当前位的结果
}
// 如果最高位还有进位,则加入结果中
if (carry > 0) {
result.unshift(carry);
}
// 将结果数组转换为字符串并返回
return result.join('');
}