Multiplying numbers as strings 大数相乘

The arguments are passed as strings.
The numbers may be way very large
Answer should be returned as a string
The returned "number" should not start with zeros e.g. 0123 is invalid

function multiply(a, b) {
        // 通常的算法操作
        /*
        例如 123 * 456
             123
           * 456
             ---
             738
            615
           492
           ----
           56088           
         */
        // 为了方便计算,先把数字反转,进位就不朝前了,而是朝后  到最后再反转回来
        var aa = a.split('').reverse(); // 
        var bb = b.split('').reverse();

        var stack = [];

        for (var i = 0; i < aa.length; i++) {
            for (var j = 0; j < bb.length; j++) {
                var m = aa[i] * bb[j];
                stack[i + j] = (stack[i + j]) ? stack[i + j] + m : m;
            }
        }
        // 组合成一维数组 给下面进位操作

        for (var i = 0; i < stack.length; i++) {
            var num = stack[i] % 10; 
            var move = Math.floor(stack[i] / 10);
            stack[i] = num;
             
            // 大于10 采取进位操作
            if (stack[i + 1])
                stack[i + 1] += move;
            else if (move != 0)
                stack[i + 1] = move;
        }


        return stack.reverse().join('').replace(/^(0(?!$))+/, ""); // 替换字符串前面的0 
    }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,452评论 0 10
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,931评论 0 38
  • Correctness AdapterViewChildren Summary: AdapterViews can...
    MarcusMa阅读 8,928评论 0 6
  • 当白幽灵闪烁于黑幕 当天穹的嘶吼贯穿大地 一只乌鸦傲慢的登场 纯黑的披风,纯黑的喙和爪 纯黑的心脏与眼睛 纯黑的像...
    风不值阅读 245评论 2 13
  • 文|枕边语 (自娱自乐,不喜勿喷。) 说起moba游戏,端游受众率最广的要数LOL了,什么五五开,草莓,微...
    生活不负你我阅读 299评论 0 1