d***@aliyun.com
d***@aliyun.com
  • 发布:2023-06-15 16:47
  • 更新:2023-06-15 16:47
  • 阅读:131

JS面试题解析:超大整数相加

分类:ASK社区

面试题:两个超出整数范围的字符串整数相加返回一个正确的字符串相加结果

/**  
 * 面试题:两个超出整数范围的字符串整数相加  
 * 返回一个正确的字符串相加结果  
 *  
 * 填充下面的代码  
 */  
function add(a, b) {  
    /*  
    对齐字符串整数:  
    - 获取两个字符串长度较大的一个字符串的长度  
    - 将两个字符串的位数进行前置补0操作,保障两个字符串位数一致  
     */  
    let max = a.length > b.length ? a.length : b.length  
    a = a.padStart(max, '0')  
    b = b.padStart(max, '0')  

    /*  
    累计相加:  
    - 从个位数第一位相加,结果只能是0~19的数值  
    - 如果小于10进位carry为0;如果大于10进位carry为1  
    - result结果字符串,拼接每次相加的结果个位数  
     */  
    let carry = 0;  
    let result = ""  
    for(let i = max-1; i >= 0; i--){  
        let sum = Number(a[i]) + Number(b[i]) + carry  
        carry = Math.floor(sum / 10)  
        result = (sum % 10) + result  
    }  
    /*  
    判断第一位数值相加结果:  
    - 如果循环结束第一位相加结果超过10,结果前面直接拼接1  
     */  
    if(carry){  
        result = carry + result  
    }  
    return result  
}  

// console.log(add('10000000000000000000000000000000000', '123456'))  
console.log(add("19", '92'))
0 关注 分享

要回复文章请先登录注册