前言

请实现一个函数 bigNumberAdd(num1, num2),用于将两个大数相加。这两个大数以字符串的形式表示,并且它们的长度可能超过JavaScript中Number类型的最大安全整数限制(即 Number.MAX_SAFE_INTEGER)。
函数应返回一个新的字符串,表示两个大数相加的结果。

示例:

  1. bigNumberAdd("12345678901234567890", "98765432109876543210");
  2. // 应返回 "11111111111111111100"
  3. bigNumberAdd("99999999999999999999", "1");
  4. // 应返回 "100000000000000000000"
  5. bigNumberAdd("1000", "0");
  6. // 应返回 "1000"

提示:

  1. 你可以考虑将字符串从右到左(即从低位到高位)进行遍历,逐位相加,并处理进位问题。
  2. 注意处理两个字符串长度不一致的情况。
  3. 当所有位都遍历完并且没有进位时,结束算法。如果还有进位,需要将进位添加到结果的最高位。

    实现

    1. function bigNumberAdd(num1, num2) {
    2. let carry = 0; // 使用carry代替flag,更清晰地表示进位
    3. let result = [];
    4. let maxLength = Math.max(num1.length, num2.length);
    5. // 确保两个字符串长度相同,通过前置补零
    6. num1 = num1.padStart(maxLength, '0');
    7. num2 = num2.padStart(maxLength, '0');
    8. // 从低位到高位逐位相加
    9. for (let i = maxLength - 1; i >= 0; i--) {
    10. let sum = parseInt(num1[i]) + parseInt(num2[i]) + carry;
    11. carry = Math.floor(sum / 10); // 计算进位
    12. result.unshift(sum % 10); // 取个位数作为当前位的结果
    13. }
    14. // 如果最高位还有进位,则加入结果中
    15. if (carry > 0) {
    16. result.unshift(carry);
    17. }
    18. // 将结果数组转换为字符串并返回
    19. return result.join('');
    20. }