字节飞书文档算法笔试题

90 阅读1分钟

实现两个大数相加

思路一 使用 BigInt

function addLargeNumbers(a, b) {
    const numberA = BigInt(a);
    const numberB = BigInt(b);
    // 保持结果的通用性和可读性
    return (numberA + numberB).toString();
}

思路二 模拟手动运算这两个数

在现实中,我们如何手工进行两个数的加法运算。当我们用笔和纸计算两个数相加时,通常会从右向左,即从个位数开始逐位相加,如果相加的结果超过10,则将多出的部分(即进位)加到下一位的计算中。这个过程会一直重复,直到所有的位数都计算完毕。如果最后还有进位,会在最前面增加一个位数。使用字符串来模拟这个过程的思路基本上是对这种手工计算过程的直接映射。

function addLargeNumbers(a, b) {
    // 确保两个参数都是字符串类型
    const strA = typeof a === 'string' ? a : a.toString();
    const strB = typeof b === 'string' ? b : b.toString();

    let i = strA.length - 1;
    let j = strB.length - 1;
    let carry = 0; // 定义进位
    let res = ''; // 存储结果的字符串
    
    while (i >= 0 || j >= 0 || carry > 0) {
        const digitA = i >= 0 ? parseInt(strA[i], 10) : 0;
        const digitB = j >= 0 ? parseInt(strB[j], 10) : 0;
        const sum = digitA + digitB + carry;
        res = (sum % 10) + res;
        carry = Math.floor(sum / 10);
     
        i--;
        j--;
    }
    return res;
}