js实现大数加和

大数就是超过整数最大上限的数,大数会被采用科学记数法的方式保存下来,这样就会导致最后的结果不准确。

通过观察,我们可以总结出我们在做加法的时候的规律。

即最小位数先相加,相加的结果个位数保留,有进位的参与到下一位的加法中。由此可看出,虽然大位的数虽然先读取到,但是是最后计算的,由此,我们可以用栈的实现方式来实现。

像上一篇文章一样,栈我们使用数组来表示

我们用三个栈分别存储和的个位数以及两个加数

let sum=function(a,b){
    let sum=[];
    let sA,sB,s=0;
    //将大数一个个放入栈中,最后个位数要在栈顶
    let numSplit=function(a){
        return r=a.split("");
    }
    sA=numSplit(a);
    sB=numSplit(b);
    console.log(sA);
    console.log(sB);
    //运算
    while(sA.length!=0 && sB.length!=0){
        s=parseInt(sA[sA.length-1])+parseInt(sB[sB.length-1])+s;
        //用这种方法来模拟出栈
        sA.length--;
        sB.length--;
        sum.push(s%10);
        //JavaScript的除法不是整除,此处s是和的存十位数
        s=(s-s%10)/10;
        //或者这样写,因为两个个位数相加,十位数最多是1
        //s=s>9?1:0
    }
    //a比较多位的时候,sA栈会剩余
    while(sA.length!=0){
        sum.push(sA[sA.length-1]+s);
        s=0;
        sA.length--;
    }
    //b比较多位的时候,sB栈会剩余
    while(sB.length!=0){
        sum.push(sB[sB.length-1]+s);
        s=0;
        sB.length--;
    }
    //ab一样位数时,且和大于9时,还有进位
    if(s!=0){
        sum.push(s);
    }
    sum=sum.reverse().join("");
    console.log(sum);
    return sum;
}
//注意传的参数也必须是字符串,因为整数无法精确保留
sum("543453786253453534535","544532543434534538729533785");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值