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

两个超大的数字相减

原创
作者头像
wuxiexy
修改2020-05-26 09:46:12
3.3K1
修改2020-05-26 09:46:12
举报
代码语言:javascript
复制
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 {
            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);
        }
    }
    minuend = reverse(minuend.join('').replace(/0+$/gi, '')).join('');
    return minus ? '-' + minuend : minuend;
}

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档