码农知识堂 - 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
  • 相关阅读:
    Windows安装mamba全流程(全网最稳定最成功)
    tornado模板注入
    深度解析Socks5代理与IP代理的网络应用
    在kubernetes+istio中通过FQDN请求Nacos服务
    企业实战之阿里druid统一监控方案,你了解吗?
    数据湖仓一体(五)安装spark
    TVM 中文站正式上线!最全机器学习模型部署「参考书」它来了
    React的Render的简单实现
    从ORB-SLAM2到DynaSLAM的编译 v1.0版本
    【源码】hamcrest 源码阅读 空对象模式、模板方法模式的应用
  • 原文地址:https://blog.csdn.net/weixin_54202947/article/details/127843808
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号