C++基础算法----正整数高精度加减乘除

4、正整数高精度

​ 出现高精度的情况一般只有C++会出现,python会无限制,java有大整数,所以基本上不用考虑,一般会出现四种情况

  • 一个较大数A + 一个较大数B
  • 一个较大数A - 一个较大数B
  • 一个较大数A * 一个数
  • 一个较大数A / 一个数

这里补充一个知识 A<=10 和 len(A)<=10

前一个A 只能取 0-10

后一个A 是A的位数小于10 也就是说 A的取值范围为(0~9999999999)

4.1、高精度加法

​ 如果我们用数组去存储一个数,应该按下面这种方式去存储,方便去进位

image-20231021111157632

那么我们来看看模板

//模板
vector<int> add(vector<int>& A, vector<int> &B) {vector<int> c;int t = 0;//进位for (int i = 0; i <A.size()|| i<B.size(); i++){//依次加上a,b上的位数if (i < A.size()) t += A[i];if (i < B.size()) t += B[i];// t%10就会得出该位的余数 比如 7+7 = 14 这里 14%10 = 4;c.push_back(t % 10);// 然后这里是看是否进位 没有进位就会变成0 有的话就会变成1// 例如 14/10 = 1; 9/10 = 0t /= 10;}//循环完看最高位是否进位 如果有的话就加上1if (t) c.push_back(1);return c;
}

​ 注意这里vector& A传进来的数组一定是一个倒着存储着大整数的数组,当然你遍历返回出来的数组也需要倒着输出,才能得到我们正常的显示。

4.2、高精度减法

在考虑高精度减法的时候,我们也是按照倒序的存储方式

image-20231021120933050

​ 这里需要注意的是,我们要先判断两个大整数谁大谁小的问题。

//判断是否 A>=B
bool cmp(vector<int>& A, vector<int>& B) {if (A.size() != B.size()) return A.size() > B.size();//这里是如果位数相等,那么比较位数上的数字for (int i = A.size() - 1; i >= 0; i--) {if (A[i] != B[i]){return A[i] > B[i];}}return true;
}

模板

vector<int> sub(vector<int>& A, vector<int>& B) {vector<int> c;for (int i = 0,t = 0; i < A.size(); i++){t = A[i] - t;if (i < B.size()) t -= B[i];//这里(t +10) %10 是为了防止<0的情况出现c.push_back((t + 10) % 10);//判断是否需要借位 如果要借位那么就减去 //t的状态只有两种 0,1 1就是借位了 0就没借if (t < 0) t = 1;else t = 0;}//这里是去掉前面的0 如果结果为001 那么就去掉前面两个0//这里的位数是根据A的位数来的 例如 A 是 123  B是120 那么123-120 = 003while (c.size() > 1 && c.back() == 0) c.pop_back();return c;
}

4.3、高精度乘法

注意这里是一个高精度的整数 X 低精度的整数

//乘法模板
vector<int> mul(vector<int>& A, int b) {vector<int> c;int t = 0;//进位for (int i = 0; i < A.size() || t; i++) {if (i < A.size()) t += A[i] * b;//模10是为了得个位还剩多少c.push_back(t % 10);// 这里除以10为了得到进多少位t /= 10;}return c;
}

4.4、高精度除法

注意这里是一个高精度的整数 / 低精度的整数

//除法模板 商是c 余数是 r
vector<int> div(vector<int>& A, int b, int& r) { //r是引用的方式传回去vector<int> c; //商 r = 0;for (int i = A.size() - 1; i >= 0; i--) {//把当前位留出来加上下一位//例:12/11 = (1*10+2)/11 r = r * 10 + A[i];c.push_back(r / b);r %= b;}reverse(c.begin(), c.end());//去掉前导0while (c.size() > 1 && c.back() == 0) c.pop_back();return c;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/115560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模式识别——贝叶斯决策理论

模式识别——贝叶斯决策理论BDR 须知基本原则0-1损失下的BDRMAP&#xff08;极大后验&#xff09;log trick 须知 所有内容在分类问题下讨论。 基本原则 定义 X X X为观测 Y Y Y为状态 g ( x ) g(x) g(x)用 x x x对 y y y进行预测预测损失为 L [ g ( x ) , i ] L[g(x),i] L[…

关于数据可视化那些事

干巴巴的数据没人看&#xff0c;数据可视化才能直观展现数据要点&#xff0c;提升数据分析、数字化运营决策效率。那关于可视化的实现方式、技巧、工具等&#xff0c;你了解几分&#xff1f;接下来&#xff0c;我们就来聊聊数据可视化那些事。 1、什么是数据可视化&#xff1f…

网络工程师知识点7

111、IS-IS路由器的三种类型&#xff1f; Level-1路由器&#xff08;只能创建level-1的LSDB&#xff09; Level-2路由器&#xff08;只能创建level-2的LSDB&#xff09; Level-1-2路由器&#xff08;路由器默认的类型&#xff0c;能同时创建level-1和level-2的LSDB&#xff09;…

友思特方案 | 3D点云实例分割现成算法模块助力实现自动化上下料应用

引言 全球范围内的大型汽车制造商和技术公司&#xff0c;以及一些专注于智能制造领域的创新企业&#xff0c;在3D视觉引导汽车部件自动化上下料项目方面都在进行研发和实践。国内外汽车制造行业&#xff0c;越来越多的企业开始采用3D视觉引导技术进行自动化上下料操作。 本文将…

优测云测试平台 | 有效的单元测试

一、前言 本文作者提出了一种评价单元测试用例的质量的思路&#xff0c;即判断用例是否达到测试的“四大目标”。掌握识别好的用例的能力&#xff0c;可以帮助我们高效地写出高质量的测试用例。 评判冰箱的好坏&#xff0c;并不需要有制造一台冰箱的能力。在开始写测试用例之…

【unity3D】Scroll Rect组件—制作下滑列表

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的Scroll Rect组件 Scroll Rect组件 基础知识详细说明案例演示——制作一个简单的下滑框扩展 介绍&#xff1a;Scroll Rect组件是用…

【万字长文】向 AI 提问的艺术

向 AI 提问的艺术 本文是我在学习 Prompt Engineering 过程中&#xff0c;总结出来的一些经验和方法。里边包含一些自己的心得和验证有效的技巧。这些技巧在很多其他文章中也有介绍&#xff0c;这里可以当作是一个集大成的汇总。 我会按照“道——法——术”三个层面来介绍向 …

【最经典的79个】软件测试面试题(内含答案)

001.软件的生命周期(prdctrm) 计划阶段(planning)-〉需求分析(requirement)-〉设计阶段(design)-〉编码(coding)->测试(testing)->运行与维护(running maintrnacne) 测试用例 用例编号 测试项目 测试标题 重要级别 预置条件 输入数据 执行步骤 预期结果 0002.问&…

vue2中,下拉框多选和全选的实现

vue2中&#xff0c;下拉框多选和全选的实现 代码布局在methods: 中添加功能函数较为完整的一个整体代码&#xff1a; 如图所示点击全选即可完成下拉框中全部子项的全部的选中&#xff0c;同时取消全选即可全部取消选择。 代码布局 <div class"chos-box2"><…

如何给照片添加水印?请看下面3个简单教程

如何给照片添加水印&#xff1f;随着智能手机的普及和不断提升的拍摄技术&#xff0c;如今人们可以轻松使用手机进行高质量的照片拍摄。从老人到小孩&#xff0c;每个人都可以在日常生活中捕捉到美好瞬间&#xff0c;并将其记录下来。作为一种表达自己的方式&#xff0c;现在手…

安装pythonQt报错

在使用命令行pip install PyQt5安装pythonQt5的时候报错。 镜像源有问题&#xff0c;手动设置可用的源 pip install PyQt5 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com tool工具 pip install PyQt5-tools -i https://pypi.douban.com/simple 安装成…

以赛促教,以赛促研 ——计算机科学系举办“火焰杯”软件测试开发选拔赛颁奖仪式

颁奖仪式 2023年3月9日&#xff0c;第三届“火焰杯”软件测试开发选拔赛颁奖仪式在南海楼124会议室举行&#xff0c;计算机科学系系主任龙锦益教授、指导老师孙玉霞副教授、测吧科技有限公司王雪冬总监及获奖同学参加了颁奖仪式。 会议伊始&#xff0c;龙锦益教授对王雪冬总监…

Jupyter Notebook 设置黑色背景主题

Jupyter Notebook 设置黑色背景主题 # 包安装 pip install jupyterthemes -i https://mirrors.aliyun.com/pypi/simple pip install --upgrade jupyterthemes # 查看可用主题 jt -l # monokai暗背景&#xff0c;-f(字体) -fs(字体大小) -cellw(占屏比或宽度) -ofs(输出段的字…

labelimg使用以及xml和txt转化

一、使用 winr——输入cmd 激活已有的环境 conda activate torch1.2.0 下载lebelme pip install labelme3.16.7 再输入labelme打开软件就可 可以设置自动保存&#xff0c;View——auto save mode打上勾 二、注意 1.自己类的定义名称&#xff0c;在txt中是0&#xff0c;1&a…

java: 警告: 源发行版 8 需要目标发行版 1.8;(可我的项目是其他版本啊?)

我的项目是1.7 可运行时却要求是1.8 情况1 提示需要1.8 而你刚好项目就是1.8 那么就是配置问题 这里就不描述怎么解决了 方案很多。 情况2 项目用的不是XX版本却提示需要XX版本 在你的Maven目录的conf文件夹下settings.xml中下面 不知道maven目录在哪从这里看 如果这里指…

H指数----题解报告

题目&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 由题目可知&#xff0c;我们要寻找的是一个最大的H值。 首先先对引用次数排序&#xff0c;然后再寻找在规定内的最大H值 public int hIndex(int[] citations) {Arrays.sort(citatio…

git初学者使用教程(包含Android studio中git使用)

文章目录 1、登录 / 注册git账号2、创建git仓库3、设置git的用户名和邮箱4、创建git仓库5、已有仓库推送代码到远程仓库6、进阶使用&#xff0c;命令行和Android studio软件使用1. 克隆&#xff08;Clone&#xff09;源码仓库2. 查看仓库状态&#xff08;Status&#xff09;3. …

【已解决】Word文档的“打开密码”在哪里设置?

我们知道&#xff0c;Word文档可以设置“打开密码”&#xff0c;保护文件不被随意打开&#xff0c;只有输入正确的密码才能打开文档。那这个“打开密码”要在哪里设置呢&#xff1f;不清楚的小伙伴往下看就知道啦。 在Word文档里&#xff0c;有两个路径可以设置“打开密码”。…

扩散模型学习——代码学习

文章目录 引言正文UNet网络结构训练方法DDPM采样方法讲解Context上下文信息添加DDIM的方法详解 总结参考 引言 这是第一次接触扩散模型&#xff0c;为了学习&#xff0c;这里好好分析一下他的代码 正文 UNet网络结构 这部分主要是定义一下网络结构&#xff0c;以及相关的网…

递归方法实现字符串反转函数

递归函数是一种在函数内部调用自身的函数。它通过将复杂的问题分解成更小的子问题来解决。递归函数通常包含两部分&#xff1a;基本情况和递归调用。请使用递归方法实现字符串反转的C语言函数。 #include <stdio.h>void reverseString(char* str) {///Begin///// 递归基…