• 两个超大的数字相减


    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;
    }
    

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

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

  • 相关阅读:
    C++ String详解
    乏力的编码很累,这里有私货..
    给自己~~微语&&歌单
    2019CSP-J第二轮 B题C题
    HDU 3966 树链剖分+树状数组 模板
    HDU 2255 KM算法 二分图最大权值匹配
    HDU 4280 ISAP+BFS 最大流 模板
    HDU 6181 第k短路
    假装会python--爬取贴吧正文
    HDU 6170 dp
  • 原文地址:https://www.cnblogs.com/wuxiexy/p/12961931.html
Copyright © 2020-2023  润新知