整型大数相加(JS字符串)

6 篇文章 0 订阅

由于语言本身的限制或者是机器本身的限制,整型数字通常都是有大小限制的,超过大小的数字没有办法正常计算

比如在js里有安全整数的概念Number.MAX_SAFE_INTEGER与Number.MIN_SAFE_INTEGE分别是最大与最小安全整数

但是很多情况下有大数相加需求的,这时通常采用字符串或者数组的方式来进行加法操作,按照四则运算的规则来计算结果

如下:

/**
 * [bigNumberAdd] 大数相加
 * @param [num1] [String] 数字字符串1
 * @param [num2] [String] 数字字符串2
 * @return [String]
 * */
function bigNumberAdd(num1, num2) {
    //如果其中一个为0,返回另一个
    if (num1 === '0') {
        return num2;
    }
    if (num2 === '0') {
        return num1;
    }

    //进位值,由于加法只有0或1两种
    let add = 0;
    let result = '';
    while (num1.length || num2.length) {
        let n1 = +(num1.slice(num1.length - 1) || '0');
        let n2 = +(num2.slice(num2.length - 1) || '0');
        num1 = num1.substring(num1.length-1, -1);
        num2 = num2.substring(num2.length-1, -1);

        //对应位置相加再加进位值
        let curr = n1 + n2 + add;
        if (curr >= 10) {
            result = curr - 10 + result;
            add = 1;
        }else {
            result = curr + result;
            add = 0;
        }
    }
    result = add === 1 ? add + result : result;
    return result;
}

以上是简单的大数相加例子,字符串方法,也有数组方法以及其他效率更高的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值