前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >两个超大的数字相乘

两个超大的数字相乘

原创
作者头像
wuxiexy
修改2020-05-25 14:24:47
8300
修改2020-05-25 14:24:47
举报

这里两个超大的数字相乘,用到前面的两个超大的数字相加的方法,所以这里顺便贴一下代码。

两个超大的数字相加

代码语言:javascript
复制
function largeCount(f, t) {
    f += "";
    t += "";
    let fl = f.length,
        tl = t.length,
        arr = [],
        i = 0,
        spacing = fl - tl,
        len = 0,
        lastMan = [],
        fr = f.split("").reverse(),
        tr = t.split("").reverse(),
        current = 0,
        curr = 0,
        isT, maxLen;
    if (spacing > 0) {
        len = tl;
        lastMan = fr;
        maxLen = fl;
    } else {
        len = fl;
        lastMan = tr;
        maxLen = tl;
    }
    function course(current, i) {
        if (current > 9) {
            arr[i] = current % 10;
            arr[i + 1] = 1;
            return true;
        } else {
            arr[i] = current;
            return false;
        }
    }
    for (; i < len;) {
        curr = arr[i] ? arr[i] : 0;
        current = fr[i] * 1 + tr[i] * 1 + curr * 1;
        course(current, i++);
        if (i === len) {
            if (arr[i]) {
                do {
                    curr = lastMan[i];
                    if (curr) {
                        current = lastMan[i] * 1 + arr[i] * 1;
                        isT = course(current, i++);
                    } else {
                        isT = false;
                    }
                } while (isT && i < maxLen);
            }
            arr = [...arr, ...lastMan.slice(i)];
        }
    }
    return arr.reverse().join("");
}

下面是两个超大的数字相乘的代码

两个超大的数字相乘

代码语言:javascript
复制
function multiply(f, t) {
    let current, currentLevel, i, j, mult, a1, a2, zero;
    let fl = f.length;
    let tl = t.length;
    let result = [];
    let fArr = [];
    let tArr = [];
    let maxLen = fl > tl ? fl : tl;
    f = reverse(f);
    t = reverse(t);
    function reverse(s) {
        return s.split('').reverse().join('');
    }
    function addZero(n) {
        let t = '';
        for (j = 0; j < n; j++) {
            t += '0';
        }
        return t;
    }
    for (i = 0; i < maxLen; i++) {
        zero = addZero(i);
        a1 = f[i];
        a2 = t[i];
        if (a1) {
            fArr[i] = [a1, zero];
        }
        if (a2) {
            tArr[i] = [a2, zero];
        }
    }
    for (i = 0; i < fl; i++) {
        current = fArr[i];
        for (j = 0; j < tl; j++) {
            currentLevel = tArr[j];
            result.push((current[0] * 1) * (currentLevel[0] * 1) + current[1] + currentLevel[1]);
        }
    }
    maxLen = result.length;
    mult = result[0];
    for (i = 1; i < maxLen; i++) {
        mult = largeCount(mult, result[i]);
    }
    return mult;
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 两个超大的数字相加
  • 两个超大的数字相乘
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档