zoukankan      html  css  js  c++  java
  • 两个超大的数字相减

    function subtract(f, t) {
        f += '';
        t += '';
        let fl = f.length, tl = t.length, minus = false, minuend = f, subtractor = t, len = tl, maxLen = fl, m, s, currIndex, currT = false, i, sp;
        function reverse(s) {
            return s.split('').reverse();
        }
    
        if (fl < tl) {
            minus = true;
            minuend = t;
            subtractor = f;
            len = fl;
            maxLen = tl;
        } else if (fl === tl) {
            for (i = 0; i < fl; i++) {
                if (f[i] > t[i]) {
                    minus = false;
                    minuend = f;
                    subtractor = t;
                    len = tl;
                    maxLen = fl;
                    break;
                } else if (f[i] < t[i]) {
                    minus = true;
                    minuend = t;
                    subtractor = f;
                    len = fl;
                    maxLen = tl;
                    break;
                }
            }
        }
        minuend = reverse(minuend);
        subtractor = reverse(subtractor);
        for (i = 0; i < len; i++) {
            m = minuend[i] * 1;
            s = subtractor[i] * 1;
            if (m > s) {
                minuend[i] = m - s;
            } else if (m < s) {
                currIndex = i + 1;
                do {
                    if (minuend[currIndex] !== '0') {
                        sp = currIndex - i;
                        minuend[currIndex] = minuend[currIndex] * 1 - 1 + '';
                        currIndex--;
                        for (let j = 0; j < sp; j++) {
                            if (currIndex === i) {
                                minuend[currIndex] = 10 + m - s + '';
                            } else {
                                minuend[currIndex--] = '9';
                            }
                        }
                        currT = false;
                    } else {
                        currT = true;
                    }
                } while (currT && ++currIndex < maxLen);
            } else {
                minuend[i] = 0;
            }
        }
        minuend = reverse(minuend.join('').replace(/0+$/gi, '')).join('');
        return minus ? '-' + minuend : minuend;
    }
    

    声明:严禁抄袭,欢迎转载!不过请带上博文链接!

    或者你有更好的实现方式、或者你觉得有可以优化的地方,不妨评论讨论下!觉得得到帮助的可以点个推荐,让更多人也可以得到帮助。

  • 相关阅读:
    2021NUAA暑假集训 Day3 题解
    2021NUAA暑假集训 Day2 题解
    2021NUAA暑期模拟赛部分题解
    CodeForces 1038D Slime
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 10689 Yet another Number Sequence
    HDU 4549 M斐波那契数列
    HDU 4990 Reading comprehension
    CodeForces 450B Jzzhu and Sequences
  • 原文地址:https://www.cnblogs.com/wuxiexy/p/12961931.html
Copyright © 2011-2022 走看看