题解 | #大数乘法#

大数乘法

http://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571

没有javascript的提交,我提交一个吧。过程就是模拟手算,一个一个数字相乘。最后加起来

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param s string字符串 第一个整数
 * @param t string字符串 第二个整数
 * @return string字符串
 */
function solve( s ,  t ) {
    // write code here
    const sLength = s.length;
    const tLength = t.length;
    let res = [];
    for (let tIndex = tLength - 1; tIndex >= 0; tIndex--) {
        const valT = parseInt(t[tIndex] || '0', 10);
        let sum = [];
        let sign = 0;
        for (let i = tLength - tIndex; i > 1 ; i--) {
            sum.push('0')
        }
        for(let sIndex = sLength - 1; sIndex >= 0; sIndex--) {
           const valS = parseInt(s[sIndex] || '0', 10);
           let temp = valT * valS + sign;
           if (temp >= 10) {
               sign = Math.floor(temp / 10);
               temp = temp % 10;
           } else {
               sign = 0;
           }
           sum.push(temp + '');
        }
        if (sign) {
            sum.push(sign + '');
        }
        res.push(sum.reverse().join(''));
    }
    let temp = '0';
    console.log(res)
    for(let i = 0; i < res.length; i++) {
        temp = add(temp, res[i]);
    }
    return temp;
}
function add(a, b) {
    let alength = a.length;
    let blength = b.length;
    let res = [];
    let sign = 0;
    for(let i = alength - 1, j = blength - 1; i >= 0 || j >= 0; i--, j--) {
       let temp = parseInt(a[i] || '0', 10) + parseInt(b[j] || '0', 10) + sign;
       if (temp >= 10) {
           sign = 1;
           temp = temp - 10;
       } else {
           sign = 0;
       }
       res.push(temp);
    }
    if (sign) res.push(sign);
    return res.reverse().join('').replace(/^0*(.+)/, '$1');
}
module.exports = {
    solve : solve
};
全部评论

相关推荐

10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务