wuxiexy

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

两个超大的数字相加

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("");
        }

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

两个超大的数字相乘

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("");
        }

主要的原理,大家看代码应该就能理解,这里就不再赘述。如果你觉得代码还可以再优化,或者你有其他的实现方法,欢迎评论交流。

转载请贴博文链接哦!

分类:

技术点:

相关文章:

  • 2022-01-03
  • 2019-09-09
  • 2021-09-02
  • 2021-11-28
  • 2021-10-24
  • 2021-09-02
  • 2021-12-29
猜你喜欢
  • 2021-11-21
  • 2021-10-25
  • 2021-08-02
  • 2021-12-19
  • 2021-11-10
  • 2022-01-03
相关资源
相似解决方案