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视觉引导技术进行自动化上下料操作。 本文将…

server error: Preprocessor dependency “less“ not found. Did you install it?

问题描述 在vue项目中的某个组件中使用less报错 <style lang"less" scoped> .main-box{width: 40px; } </style>错误原因 这个错误通常表示在你的项目中缺少了 Less 预处理器的依赖。 解决办法 确保你已经在项目中正确安装了 Less 预处理器。你可以…

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

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

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

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

装备控制类嵌入式软件开发知识

1.嵌入式系统概念及特点 嵌入式系统是一种可深埋在某一专用设备中的系统。一般而言&#xff0c;由于设备的体积、重量和功耗的限制&#xff0c;嵌入式系统将受到多种条件和环境的制约&#xff0c;这也对嵌入式系统提出了有别于其他计算机系统的特殊要求。 通常&#xff0c;嵌…

【万字长文】向 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;龙锦益教授对王雪冬总监…

2023年9月青少年软件编程(Python) 等级考试试卷(一级)

青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09;202309 2023年9月 分数&#xff1a;100 题数&#xff1a;37 一、单选题(共25题&#xff0c;共50分) 1. 下列 Python 语句能够正确输出"学而时习之"五个字的是&#xff1f;…

C++ 纠错题总结2

1、for循环中的判断语句: 要注意初始赋值、< 还是 < for(int i 0; i < n; i) 2、cin.getline(char[], int, char) 注意&#xff1a;第二个参数为不是char[]的有效元素个数&#xff0c;因为最后一个元素位置要用来存储 \0 3、函数形参有默认值的&#xff0c;有默认…

使用python_opencv比较图像差异/使用python_opencv找出两张图像的差异范围

目录 1 创建conda环境 2 安装python库 2.1 报错 ModuleNotFoundError: No module named numpy 3 image_diff.py

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…

C++ string 类相关知识

/* ISO/ANSI C标准通过添加string类扩展了C库,因此现在可以string类型的变量(使用C的话 说是对象)而不是字符数组来存储字符串。读者将看到,string 类使用起来比数组简单,同时提供了将字 符串作为一种数据类型的表示方法。 要使用string类,必须在程序中包含头文件string。s…