js实现高精度加减乘除模板的示例代码

 更新时间:2023年10月26日 08:44:42   作者:晨出  
这篇文章给大家介绍了如何使用js实现高精度加减乘除模板,文章通过代码示例介绍的非常详细,对大家的学习或工作有一定的帮助,感兴趣的小伙伴可以自己动手尝试一下

高精度加法

我们一起来模拟一下小学的时候我们怎么算加法的,如 298 + 67

  • 先个位相加:8 + 7 = 15,个位结果是5,十位进位为1
  • 再十位相加:9 + 6 = 15, 十位得到5,再加上个位的进位,得到结果是6,向百位进位为1
  • 最后百位相加:2 + 1(进位)= 3

得到答案是365

代码

大整数相加一般会超过我们存储的最大位数,所以我们一般用字符串来存储。

我们每次都是从个位开始计算,所以采用倒序遍历的方式

function add(a , b) {
    let res = "";
    // 用tmp来表示进位信息
    let tmp = 0;
    for(let i = a.length - 1, j = b.length - 1; i >= 0|| j >= 0; i--,j--) {
        if (i >= 0) tmp += a[i] - '0';
        if (j >= 0) tmp += b[j] - '0';
        // 结果
        res += tmp % 10;
        // 得到进位,下一次循环中,会直接加上上次的进位数
        tmp = Math.floor(tmp / 10);
    }
    if(tmp) res += tmp;
    return res.split('').reverse().join('');
}
​
let res = add("298 ","67");
console.log(res)

高精度减法

模拟一下减法运算,如 171 - 29

  • 先个位相减:1 - 9 需要向十位借位得11 - 9 = 2
  • 十位相减:7 - 1(借位) - 2 = 4
  • 百位 1 - 0 = 1

答案是142

代码

function sub(a, b) {
    let t = 0;
    let res = "";
    for(let i = a.length - 1, j = b.length - 1; i >= 0|| j >= 0; i--,j--) {
        // 先减去上一次的借位,t初始化为0
        if(i >= 0) t = +a[i] - t;
        if(j >= 0) t -= +b[j];
        // 如果是负数就借位再取余
        res += (t + 10) % 10;
        
        // t < 0 表示有借位
        if(t < 0) t = 1;
        else t = 0;
    }
    // 去除前导0,如69-69,只保留最后一个0即可
    while(res[res.length - 1] === '0' && res.length > 1) res = res.slice(0,res.length - 1);
    return res.split('').reverse().join('');
}
​
console.log(sub("5432117","2119"))

高精度乘法

注意:我们这里的高精度乘法,指的是一个高精度的数a和低精度的数b相乘,所以我们使用字符串存储a,b是一般的数字类型

如:78*66 我们可以将66看成一个整体,如果对66看出一个整体不太理解的,可以模拟计算一下 78 * 6

  • 8*6 = 48 个位为 48 % 10 = 8,进位为48 / 10 = 4
  • 7*6 = 42 个位为42 % 10 = 2 + 上次的进位4 = 6,并进位42 / 10 = 4
  • 答案为468

将b看出一个整体,计算方法其实是一样的

代码

function mul(a, b) {
    let t = 0;
    let res = "";
    for(let i = a.length - 1; i >= 0; i--) {
        // 加上上一次的进位,初始化t = 0
        t += +a[i]*b;
        res += t % 10;
        // 保留进位
        t = Math.floor(t / 10);
    }
    if(t) res += t;
    // 去除前导0
    while(res[res.length - 1] === '0' && res.length > 1) res = res.slice(0, res.length - 1)
    return res.split('').reverse().join('');
}
​
console.log(mul('88',66))

高精度除法

和高精度乘法同理,也是一个高精度的数a和低精度的数b相除

代码

function div(a,b) {
    const num = [];
    for(let i = a.length - 1; i >= 0; i--) {
        num.push(a[i] - '0');
    }
    let t = 0;
    let res = "";
    for(let i = num.length - 1; i >= 0; i--) {
        t = t*10 +num[i]
        res += Math.floor( t / b );
        t %= b;
    }
    while(res.length > 1 && res[0] === '0') res = res.slice(1,res.length)
    return [res,t];
}
​
console.log(div('7',2))

到此这篇关于js实现高精度加减乘除模板的示例代码的文章就介绍到这了,更多相关js实现高精度加减乘除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 一个简单的弹性返回顶部JS代码实现介绍

    一个简单的弹性返回顶部JS代码实现介绍

    页面滚动条处于低端,点击回到顶部,并且隐藏掉,具体实现代码如下,感兴趣的朋友可以参考下哈
    2013-06-06
  • JavaScript使用canvas绘制坐标和线

    JavaScript使用canvas绘制坐标和线

    这篇文章主要为大家详细介绍了JavaScript使用canvas绘制坐标和线,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • JS event使用方法详解

    JS event使用方法详解

    event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等。 event对象只在事件发生的过程中才有效。
    2008-04-04
  • 微信小程序后端无法保持session的原因及解决办法问题

    微信小程序后端无法保持session的原因及解决办法问题

    这篇文章主要介绍了微信小程序后端无法保持session的原因及解决办法问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 微信小程序之console.log()使用方法

    微信小程序之console.log()使用方法

    console.log() 是 JavaScript 中的标准内置函数,主要用于在浏览器的控制台(Console)中输出信息,帮助开发者进行调试和跟踪代码运行状态,下面给大家介绍微信小程序之console.log()使用,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • JS小功能(offsetLeft实现图片滚动效果)实例代码

    JS小功能(offsetLeft实现图片滚动效果)实例代码

    这篇文章主要介绍了offsetLeft实现图片滚动效果实例代码,有需要的朋友可以参考一下
    2013-11-11
  • JavaScript性能优化之提升页面加载速度的七个技巧

    JavaScript性能优化之提升页面加载速度的七个技巧

    在现代Web开发中,性能优化是一个永恒的话题,随着用户对页面加载速度的要求越来越高,JavaScript的性能优化显得尤为重要,最近,我在一个大型电商项目中通过实施7个关键的JavaScript优化技巧,成功将页面加载速度提升了65%,本文将详细分享这些实战经验
    2025-11-11
  • 如何实现js拖拽效果及原理解析

    如何实现js拖拽效果及原理解析

    这篇文章主要介绍了如何实现js拖拽效果及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • JS 删除字符串最后一个字符的实现代码

    JS 删除字符串最后一个字符的实现代码

    本篇文章主要是对JS删除字符串最后一个字符的实现代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-02-02
  • TypeScript中Enum类型的具体使用

    TypeScript中Enum类型的具体使用

    在TypeScript 中,枚举或枚举类型是具有一组常量值的常量长度的数据结构,本文主要介绍了TypeScript中Enum类型的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10

最新评论