JavaScript题解 | #大数加法#

大数加法

https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 计算两个数之和
 * @param s string字符串 表示第一个整数
 * @param t string字符串 表示第二个整数
 * @return string字符串
 */
function solve( s ,  t ) {
    // write code here
    return stringAdd(s, t);
}

function stringAdd(a, b) {
    /// 1. 补齐两个数
    let a_arr = a.split('');
    let b_arr = b.split('');
    let dis_a_b = Math.abs(a.length - b.length);
    if(a.length > b.length) {
        while(dis_a_b--) {
            b_arr.unshift(0);
        }
    } else {
        while(dis_a_b--) {
            a_arr.unshift(0);
        }
    }
    // 2. 计算
    let flag = 0, n = 0, sum_arr = [];
    for(let i = a_arr.length - 1; i >= 0; i--) {
        const a_num = a_arr[i] / 1; // str / 1 和 parseInt 效果一致
        const b_num = b_arr[i] / 1;

        const temp_sum = a_num + b_num + flag;
        flag = (temp_sum / 10)>>>0; // >>> 0 和 Math.floot 效果一致
        n = temp_sum % 10; // 获取余数
    
        sum_arr.unshift(n);
    }

    if(flag) {
        sum_arr.unshift(flag);
    }

    res = sum_arr.join('');

    return res;
}

module.exports = {
    solve
};

思路:

按照正常加法过程来模拟大数相加,从个位一直加到最高位,加的过程中涉及到的就是10以内的加减法,把结果的个位保存起来以及产生产生的进制位flag也保存起来。

每次加的时候都要加上flag,在运算最后的时候判断一下flag是否还有值,有的话直接插入(头插)到结果数组里sum_arr。

最后,正向输出结果数组就得到了想要的值。

简化过程:

  • 补齐两个参数String,省去一堆麻烦的判断
  • 从个位(倒序)开始10以内的加法,记录进制位和运算结果个位 flag = Math.floor(sum / 10) , num = sum % 10
  • 两个数加法完毕,判断最后flag是否还有值,有就插入到sum_arr
  • sum_arr转化成String,输出
全部评论

相关推荐

头像
10-09 19:35
门头沟学院 Java
洛必不可达:java的竞争激烈程度是其他任何岗位的10到20倍
点赞 评论 收藏
分享
joe2333:怀念以前大家拿华为当保底的日子
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务