【算法】高精度
作者:指针不指南吗
专栏:算法篇🐾不能只会思路,必须落实到代码上🐾
文章目录
- 前言
- 一、高精度加法
- 二、高精度减法
- 三、高精度乘法
- 四、高精度除法
前言
高精度即很大很大的数,超过了 long long 的范围,不能直接读取进行运算,需要用 string 读入,然后存储在数组中去。
高精度算法即把每一位上的数单独拿出来,分别计算,再跟每一位之间的关系,再研究,最后结果仍然存在数组中并输出。
一、高精度加法
-
思路
- 大整数的存储
- 使用 vector 存储,a[0] 存储个位,依次往后最后存储最高位
- 代码思想
- 从个位数开始依次,让a,b每一位相加,结果取模存在结果数组C中,t 表示进位
- 每次两个数a,b的各个位相加再加上进位t
- 直到加到最高位
- 大整数的存储
-
模板
#include<bits/stdc++.h> using namespace std;//C=A+B vector<int> add(vector<int> &A,vector<int> &B)//引用减少时间,不使用引用即把原数据copy一遍,费时间 {vector<int> C; //定义一个结果答案if(A.size()<B.size()) return add(B,A);int t=0; //t表示进位,个位开始,无需+进位,即t=0 for(int i=0;i<A.size();i++){ t+=A[i];if(i<B.size()) t+=B[i]; //各个位上的数 和 进位 相加 C.push_back(t%10); t/=10; //求进位 } if(t) C.push_back(1); //离开循环时,t没有加 return C; }int main() {string a,b;vector<int> A,B;cin>>a>>b; //输入123456//存储大整数 倒着存储 for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0'); //存储 6,5,4,3,2,1for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0'); //注意这里是字符串的长度aauto C=add(A,B);for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]); //注意 倒序输出return 0; }
二、高精度减法
-
思路
- 大整数的存储
- 核心思想
- 确保是大数减小数,首先从个位开始作差,取模存储在C中,t 表示借位(
这里很巧妙具体看下面的代码
) - 每次各个位上的数作差 - 借位 t ,取模存起来,有借位 t=1,没有t=0;
- 直到 大整数.size( )
去前导0
- 确保是大数减小数,首先从个位开始作差,取模存储在C中,t 表示借位(
-
模板
#include<bits/stdc++.h> using namespace std;//判断两个大整数的大小 bool cmp(vector<int> &A,vector<int> &B){ if(A.size()!=B.size()) return A.size()>B.size(); //位数不同时 if(A.size()==B.size()) //位数相同时 for(int i=0;i<A.size();i++)if(A[i]!=B[i]) return A[i]>B[i]; }//C=A-B vector<int> sub(vector<int> &A,vector<int> &B) {if(!cmp(A,B)) {cout<<'-'; //如果小减去大数:注意加个 - 负号 return sub(B,A); //交换 }vector<int> C;int t=0; //t表示借位 for(int i=0;i<A.size();i++){t=A[i]-t; //各个位上的数,先减去借位if(i<B.size()) t-=B[i]; //B还有数的话,减去B[i];C.push_back((t+10)%10); //巧妙:不用分情况,正负数一块取成正的if(t<0) t=1; //判断是否借位 else t=0;}while(C.size()>1&&C.back()==0) C.pop_back(); //去掉前导0 如003 return C; }int main() {string a,b;vector<int> A,B;cin>>a>>b; //大整数的存储for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');auto C=sub(A,B);for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);return 0;}
三、高精度乘法
高精度乘法一般是 一个大整数乘一个比较小的数
-
思路
-
大整数的存储
-
核心思想
- 小的数b不拆,让b依次和大数A的每一位相乘
从A的个位开始
,t表示进位; - 对每次计算
A[i]*b+t
的结果取模,存在结果数组中,借位除10即可,t可以任意大,比如可以进位22 - 直到 大数的最高位&&t==0
去掉前导0
- 小的数b不拆,让b依次和大数A的每一位相乘
- 模板
#include<bits/stdc++.h> using namespace std;//C=A*b vector<int> mul(vector<int> &A,int b) {vector<int> C;int t=0; //t表示进位for(int i=0;i<A.size()||t;i++){ //两个条件都满足才能退出来,否则没有计算完t=A[i]*b+t; //A的每一位与b相乘加上进位C.push_back(t%10); //对计算结果取模,存在结果数组中t/=10; }while(C.size()>1&&C.back()==0) C.pop_back(); //去掉前导0return C; }int main() {string a;int b; // 小的数用int 来存就OKvector<int> A;cin>>a>>b;for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');auto C=mul(A,b);for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);return 0;}
-
四、高精度除法
高精度除法一般是一个大的整数除以一个小的整数
-
思路
- 大整数的存储
- 核心思想
- 从最高位开始,最高位除以除数,余数r剩下;
- r*10+大整数的下一位,再除以除数,余数r剩下;
- 重复,直到个位
去掉前导0
-
模板
#include<bits/stdc++.h>
using namespace std;//A➗b=C...r
vector<int> div(vector<int> &A,int b,int &r)
{vector<int> C;r=0; //r表示余数for(int i=A.size()-1;i>=0;i--){r=r*10+A[i]; //新的除数C.push_back(r/b); //把商存下来r%=b; //取余数
}reverse(C.begin(),C.end()); //反正问题,现在虽然是正序,但是与其他运算保持一致,输出的反序,所以现在反过来,负负得正while(C.size()>1&&C.back()==0) C.pop_back(); //去掉前导0return C;
}int main()
{string a;int b;vector<int> A;cin>>a>>b;for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');int r; //除法多个一个余数auto C=div(A,b,r);for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);printf("\n");printf("%d",r);return 0;}
![](https://img-blog.csdnimg.cn/187832d570e64ca9a8207fa9a0e7dfcf.jpeg#pic_center)
相关文章:
![](https://img-blog.csdnimg.cn/187832d570e64ca9a8207fa9a0e7dfcf.jpeg#pic_center)
【算法】高精度
作者:指针不指南吗 专栏:算法篇 🐾不能只会思路,必须落实到代码上🐾 文章目录前言一、高精度加法二、高精度减法三、高精度乘法四、高精度除法前言 高精度即很大很大的数,超过了 long long 的范围&…...
![](https://img-blog.csdnimg.cn/b57521a32c8444b7bcefbe20086f0bcd.png)
计算机网络-基本概念
目录 计算机网络-基本概念 互联网 Java的跨平台原理 编辑 C\C的跨平台原理 解释性语言的跨平台原理(python,js等) 客户端 vs 服务器 什么是协议? 网络互连模型 请求过程 计算机之间的通信基础 计算机之间的连接方式-网线直连(需要用交叉线,而…...
![](https://img-blog.csdnimg.cn/e8fdf4b7f89841239a5bd522df96798c.png)
你评论,我赠书~【哈士奇赠书 - 13期】-〖Python程序设计-编程基础、Web开发及数据分析〗参与评论,即可有机获得
大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬 ὎…...
![](https://img-blog.csdnimg.cn/fd0cd5591e9342d4b8b9e0fa428e8929.png)
【设计模式】我终于读懂了代理模式。。。
👦代理模式的基本介绍 1)代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 2)被代理的对象可以是远程对象、创建…...
![](https://img-blog.csdnimg.cn/ade8b1800ab24f6a89bbd3702d42d49f.png#pic_center)
每天10个前端小知识 【Day 2】
👩 个人主页:不爱吃糖的程序媛 🙋♂️ 作者简介:前端领域新星创作者、CSDN内容合伙人,专注于前端各领域技术,成长的路上共同学习共同进步,一起加油呀! ✨系列专栏:前端…...
![](https://img-blog.csdnimg.cn/img_convert/2611cc239a68344fbbacff2ee9d1bc28.png)
帮助中心在线制作工具推荐这4款,很不错哟!
根据用户咨询问题是否解决的情景,分为三个部分,首先帮助中心恰好有用户需要咨询的问题,用户可以通过点击相关问题即可解决自己的问题,其次,用户第一眼没有在帮助中心解决问题,有个搜索框,用户的…...
![](https://www.ngui.cc/images/no-images.jpg)
rabbitMQ相关文章汇总
RabbitMQ五种工作模式: https://blog.csdn.net/weixin_41882200/article/details/117128590?ops_request_misc%257B%2522request%255Fid%2522%253A%2522167625223516800182771874%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id1…...
![](https://img-blog.csdnimg.cn/5541c7ca44ed434da6753925b615b7e0.jpeg)
【C++】异常
🌈欢迎来到C专栏~~异常 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤…...
![](https://img-blog.csdnimg.cn/img_convert/cd349794cac93852362b7679925b692e.png)
@Validated注解不生效问题汇总
Validated注解不生效问题汇总 文章目录Validated注解不生效问题汇总背景:一:可能原因原因1:原因2:原因3:原因4:二:补充全局异常对validation的处理背景: 项目框架应用的是validatio…...
![](https://www.ngui.cc/images/no-images.jpg)
华科万维C++章节练习2_4
题目:编写程序,从键盘输入一个字符,然后在屏幕上输出该字符开头的连续3个字符以及对应ASCII码。 输出格式请参看: 请输入一个字符>>A 字符 ASCII码 A 65 B 66 C 67 请按任意键继续. . . 请直接…...
![](https://img-blog.csdnimg.cn/img_convert/375fca8672e57bfb8835b22fbb4dd167.jpeg)
17万字数字化医院信息化建设大数据平台建设方案WORD
【版权声明】本资料来源网络,知识分享,仅供个人学习,请勿商用。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间删除!完整资料领取见文末,部分资料内容: 目录 第1章 医院信息化概述 1.…...
![](https://www.ngui.cc/images/no-images.jpg)
Android 11系统签名修改
Android OS 映像在两个地方使用加密签名:映像中的所有 .apk 文件都必须经过签名。Android 软件包管理器通过下列两种方式使用 .apk 签名:更换应用时,必须使用与旧应用相同的密钥对其签名,才能存取旧应用的数据。无论是通过覆盖 .a…...
![](https://img-blog.csdnimg.cn/0892f9632a69452caacf236f6c095f2e.png)
亚马逊、沃尔玛卖家自养号退款经验和测评技术
今天给大家介绍下在做亚马逊、沃尔玛退款自养号中的经验,众所周知,自养号最重要的是养号的环境,包括系统的纯净度,下单的信用卡以及其他的一些细节。 环境系统市面上有很多,鱼龙混杂,比如什么lumi…...
![](https://img-blog.csdnimg.cn/img_convert/2d35cdb06345df0d8d6b3224a6cad1b2.png)
Spring Security in Action 第十一章 SpringSecurity前后端分离实战
本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringSecurity相关知识相关知识,打造完整的SpringSecurity学习步骤,提升工程化编码能力和思维能力,写出高质量代码。希望大家都能够从中有所收获&#…...
![](https://img-blog.csdnimg.cn/img_convert/f97ec69ec772d5737f142ffb519b2b96.png)
高级前端二面vue面试题(持续更新中)
action 与 mutation 的区别 mutation 是同步更新, $watch 严格模式下会报错 action 是异步操作,可以获取数据后调用 mutation 提交最终数据 MVVM的优缺点? 优点: 分离视图(View)和模型(Model)ÿ…...
![](https://img-blog.csdnimg.cn/fc319752a89741289f799ecf3eb685cc.png)
七大设计原则之依赖倒置原则应用
目录1 依赖倒置原则2 依赖倒置应用1 依赖倒置原则 依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构时,高层模块不应该依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节;细节应该依赖抽象。…...
![](https://www.ngui.cc/images/no-images.jpg)
Dubbo面试题2023
1、为什么要用Dubbo 随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务 的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、 …...
![](https://img-blog.csdnimg.cn/a029123fa36a47daacee96c4084cae9e.png)
Swift(5)
目录 集合类型 数组 编辑 合集 合集操作 字典 Where 集合类型 Swift提供了三种主要的集合类型:组合,合集,字典。 数组是有序的值的集合。 合集是唯一值的无序集合。 字典是无序的键值对集合。 数组 Swift数组的类型的完整写法是…...
![](https://img-blog.csdnimg.cn/2e801aa85df74f31ba85ab1273150b1d.png)
[Java 进阶面试题] CAS 和 Synchronized 优化过程
最有用的东西,是你手里的钱,有钱就有底气,还不快去挣钱~ 文章目录CAS 和 Synchronized 优化过程1. CAS1.1 CAS的原理1.2 CAS实现自增自减的原子性1.3 CAS实现自旋锁1.4 CAS针对ABA问题的优化2. synchronized2.1 synchronized加锁阶段分析2.2 synchronized优化CAS 和 Synchroniz…...
![](https://www.ngui.cc/images/no-images.jpg)
算法思想 - 贪心算法
本文主要介绍算法中贪心算法的思想: 保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。贪心思想相关题目分配饼干455. Assign Cookies (Easy)Input: [1,2], [1,2,3] Output: 2Explanation: You have 2 children and 3 cookies. The greed factors of 2 …...
![](https://img-blog.csdnimg.cn/img_convert/612109941e759fe1503399493f38df14.png)
解决需求变更难题的8大方案
需求变更8大原因为什么会出现需求变更,这是由于需求约束、规则有了新的变化、由于政策发生变化,客户、沟通方式、流程化、标准化的问题等导致。这里在在过去的项目经验中,提出了常见的8大需求变更的原因。政策发生变化:指由于国家…...
![](https://img-blog.csdnimg.cn/1367456dbebc49fc9fdbd933affe3b81.png)
NSSROUND#8[Basic]
文章目录一、[NSSRound#8 Basic]MyDoor二、[NSSRound#8 Basic]Upload_gogoggo三、[NSSRound#8 Basic]MyPage四、[NSSRound#8 Basic]ez_node一、[NSSRound#8 Basic]MyDoor <?php error_reporting(0);if (isset($_GET[N_S.S])) {eval($_GET[N_S.S]); }if(!isset($_GET[file])…...
![](https://img-blog.csdnimg.cn/bdc303b5bdf245d982d3c1e9eb99dc9c.png)
Vue3代码初体验找不同
文章目录🌟 写在前面🌟 代码分析🌟 写在最后🌟 写在前面 专栏介绍: 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相关技术文章,Vue 框架目前的地位大家应该都晓…...
![](https://img-blog.csdnimg.cn/98ebd7e0fd0b42f8a1a5464984661e44.png)
opencv调取摄像头录制
大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…...
![](https://img-blog.csdnimg.cn/757d48081a504a998ba218f6796df9c6.png)
html标签手册
完整的HTML页面📑 ①基础标签📑📑📑 HTML <!DOCTYPE> 声明 !DOCTYPE声明必须是 HTML 文档的第一行,位于 html标签之前。 !DOCTYPE 声明不是 HTML 标签;它是指示 web 浏览器关于页面使用哪个 HTML 版…...
![](https://img-blog.csdnimg.cn/ce8a929ad0fc498c9a3a961dfbb7acb7.png)
SpringMVC--视图、RESTful案例、处理AJAX请求
SpringMVC的视图 SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户 SpringMVC视图的种类很多,默认有转发视图和重定向视图 当工程引入jstl的依赖,转发视图会自动转换为JstlView 若使用的视图技术为…...
![](https://img-blog.csdnimg.cn/img_convert/7f8af965fa64e90daafa74485ec36559.jpeg)
一个同学升了leader,今年活还没干,他就已经想好组里成员的两次绩效考核怎么打了,还说:leader都是这样的!...
绩效是大家都比较关注的事情,那么作为领导,一般是怎么打绩效的呢?一位网友爆料:一个大学同学升了leader,前段时间跟他吃饭,他说他已经想好了今年组里成员的两次绩效考核怎么打了。该网友有点吃惊࿰…...
![](https://img-blog.csdnimg.cn/60b956dd0f824c65a1937c7a34f8bfba.png)
Docker 面试知识点
Docker 是什么? 是实现容器技术的一种工具是一个开源的应用容器引擎使用 C/S 架构模式,通过远程API 来管理 (我们本机是 C,docker 引擎是 S,实际的构建过程是在 docker 引擎下完成的)可以打包一个应用及依赖包到一个轻量级、可移植的容器中 …...
![](https://img-blog.csdnimg.cn/b7d880e84f224a3f859fc5cf122e6f4e.png)
C++高级篇学习笔记
文章目录 前言 本文记录C一些面试难点问题剖析。 1. 左右值和右值引用的作用 左值:可以在左边,表达式结束后依然存在的持久对象,一般有名字,可以取地址。 提示: 前置自加/自减 可以做左值; 右值在右边&a…...
![](https://www.ngui.cc/images/no-images.jpg)
gentoo基本安装过程
该文章是本人在gentoo官方安装文档的基础上简单总结的,也是本人自己实践过的,目前本人用的就是gentoo,对于真的需要安装gentoo的朋友,建议还是参考官方文档,说的比较详细,这个可以简单看看,可以…...
![](/images/no-images.jpg)
东莞做网站哪家好/百度推广外包
文档主要来自:http://blog.csdn.net/yjkwf/article/details/6067267 1. static类型 用static可以为类类型的所有对象所共有,像是全局对象,但又被约束在类类型的名字空间中。static定义的静态常量在函数执行后不会释放其存储空间。可以实施封装…...
![](https://images0.cnblogs.com/blog2015/450484/201507/151930389547043.png)
官方网站管理办法/电脑优化
前一篇介绍了怎么从手机中读取图片文件,放入组件GridView实现网格效果的缩略图显示。 今天研究了对GridView中的子项(各张小图片)进行删除的操作,参考已有软件,长按图片跳出删除确认框。 GridView长按事件为OnItemLong…...
![](https://img-blog.csdnimg.cn/20200629182251721.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NTRE4yNDk3MjQyMDQx,size_16,color_FFFFFF,t_70)
沈阳 网站建设/网站网页设计
前言:打脸了,前脚刚说过要跟Servlet正式告别。结果最近的面试被问到了同一个Servlet可不可以被映射到多个URL上,也就是如何用一个Servlet实现多个功能。 前置知识: Servlet容器如何处理请求资源路径? 1、这个地址 ht…...
![](https://img-blog.csdnimg.cn/20210927175654350.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARG9l,size_20,color_FFFFFF,t_70,g_se,x_16)
小企业网站建设系统哪个好/徐汇网站建设
题目 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 给你一个链表,每 k 个节点一组进行翻…...
![](https://images2015.cnblogs.com/blog/827512/201511/827512-20151125154541874-1354543769.jpg)
怎么建设网站赚钱手机/怎么百度推广
新建信息布局:自动出来的是系统的组件,里面是listview,写ontextchanglis也行<LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" android:layout_width"match_parent" android:layout_height&…...
![](/images/no-images.jpg)
乌兰察布做网站的公司/现在阳性最新情况
1、使用参数化SQL语句进行模糊查找的正确方法://定义sql语句string sql "SELECT StudentID,StudentNO,StudentName FROM Student WHERE StudentName like StudentName";//给参数赋值command.Parameters.AddWithValue("StudentName",txtStudent…...