码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 高精度算法【加减乘除】


    全文目录

    • 😍 前言
    • 😀 高精度加法
      • 🤔 操作步骤
      • 😵‍💫 代码模板
    • 😀高精度减法
      • 🤔操作步骤
      • 😵‍💫 代码模板
    • 😀高精度乘法
      • 🤔操作步骤
      • 😵‍💫 代码模板
    • 😀 高精度除法
      • 🤔 操作步骤
      • 😵‍💫 代码模板

    😍 前言

    在实际应用中,语言提供的数据类型的最大值或最小值可能不足以支撑我们所进行的运算,这时会导致数据的溢出,所以我们需要一种算法来保证运算结果的精度。高精度运算就是为了解决这一问题而来的。简单来说,就是将数据的每一位的分开,存放在数组中,通过对数组中的每个位置来进行相应的运算来的得到最终结果。

    需要注意的是:

    1、由于数据过大,所以在进行输入的时候一般用字符串来进行存放

    2、在将数据的每一位放进数组中时,最好是反着存放,也就是从前往后,位数依次升高。

    以存放753 和 964 为例:
    在这里插入图片描述

    这样存放的好处在于方便进位,当他们需要进位的时,可以直接尾插。如果是正着存放的话每次进位都需要头插,全部数据都要往后挪,过于麻烦。

    在这里插入图片描述
    同样的在读取数据的时候需要从后往前读取,或者数据逆置一下。


    😀 高精度加法

    两数相加,数据的前后顺序不影响结果。

    但是根据手算,如果是小数加大数的话,不方便进位,所以在进行运算前先保证大数在前,小数在后。方便进行进位运算

    🤔 操作步骤

    高精度加法的步骤:

    a + b

    1、将a 和 b 每一位的数据存放分开在数组A 和 B 中(A.size >= B.size)

    2、用 t 来保存上一位进位的结果

    3、从前往后,同时遍历A 和 B , t 分别加上两个数据的低位A[i] 和 B[i] ,得到这一位的运算结果

    4、将这一位的结果的个位尾插进数组中保存起来(一次只能去一位数) ———> (t % 10 )

    5、记录这一位的进位结果 ———> (t / 10 )

    6、重复上述步骤,直到 A 遍历完(因为 A.size >= B.size ,所以 A 结束了,运算也就结束了)

    7、最后一次运算可能还需要进位,将 t 中保留的进位结果尾插进数组


    😵‍💫 代码模板

         A
      +  B
      —————————
      	 C
    // C = A + B, A >= 0, B >= 0, A.size >= B.size
    vector<int> add(vector<int> &A, vector<int> &B)
    {
       
        if (A.size() < B.size())   // 保证位数大的 + 位数小的
        	return add(B, A);
    
        vector<int> C;		// 保存运算结果
        int t = 0;		// 保存上一次的进位结果
        for (int i = 0; i < A.size
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    Java 基础 --- Comparable 和 Comparator
    vue watch监听vuex中的数据变化
    备忘录模式(Memento Pattern)
    rk3588编译lunch出错
    Spark Optimizer 规则下的 BUG 排查与修复全记录
    测试/开发程序员为什么这么吃香,高薪的“孤独症患者“......
    逆袭-2014年中电投篮球赛札记_01【转】
    numpy的部分通用函数浅谈
    春节静态HTML网页作业模板 传统节日文化网站设计作品 静态学生网页设计作业简单网页制作
    nvidia控制面板锐化怎么开启?
  • 原文地址:https://blog.csdn.net/weixin_54202947/article/details/127843808
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号