【算法】高精度
作者:指针不指南吗
专栏:算法篇🐾不能只会思路,必须落实到代码上🐾
文章目录
- 前言
- 一、高精度加法
- 二、高精度减法
- 三、高精度乘法
- 四、高精度除法
前言
高精度即很大很大的数,超过了 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;}
相关文章:
【算法】高精度
作者:指针不指南吗 专栏:算法篇 🐾不能只会思路,必须落实到代码上🐾 文章目录前言一、高精度加法二、高精度减法三、高精度乘法四、高精度除法前言 高精度即很大很大的数,超过了 long long 的范围&…...
计算机网络-基本概念
目录 计算机网络-基本概念 互联网 Java的跨平台原理 编辑 C\C的跨平台原理 解释性语言的跨平台原理(python,js等) 客户端 vs 服务器 什么是协议? 网络互连模型 请求过程 计算机之间的通信基础 计算机之间的连接方式-网线直连(需要用交叉线,而…...
你评论,我赠书~【哈士奇赠书 - 13期】-〖Python程序设计-编程基础、Web开发及数据分析〗参与评论,即可有机获得
大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬 ὎…...
【设计模式】我终于读懂了代理模式。。。
👦代理模式的基本介绍 1)代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 2)被代理的对象可以是远程对象、创建…...
每天10个前端小知识 【Day 2】
👩 个人主页:不爱吃糖的程序媛 🙋♂️ 作者简介:前端领域新星创作者、CSDN内容合伙人,专注于前端各领域技术,成长的路上共同学习共同进步,一起加油呀! ✨系列专栏:前端…...
帮助中心在线制作工具推荐这4款,很不错哟!
根据用户咨询问题是否解决的情景,分为三个部分,首先帮助中心恰好有用户需要咨询的问题,用户可以通过点击相关问题即可解决自己的问题,其次,用户第一眼没有在帮助中心解决问题,有个搜索框,用户的…...
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…...
【C++】异常
🌈欢迎来到C专栏~~异常 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤…...
@Validated注解不生效问题汇总
Validated注解不生效问题汇总 文章目录Validated注解不生效问题汇总背景:一:可能原因原因1:原因2:原因3:原因4:二:补充全局异常对validation的处理背景: 项目框架应用的是validatio…...
华科万维C++章节练习2_4
题目:编写程序,从键盘输入一个字符,然后在屏幕上输出该字符开头的连续3个字符以及对应ASCII码。 输出格式请参看: 请输入一个字符>>A 字符 ASCII码 A 65 B 66 C 67 请按任意键继续. . . 请直接…...
17万字数字化医院信息化建设大数据平台建设方案WORD
【版权声明】本资料来源网络,知识分享,仅供个人学习,请勿商用。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间删除!完整资料领取见文末,部分资料内容: 目录 第1章 医院信息化概述 1.…...
Android 11系统签名修改
Android OS 映像在两个地方使用加密签名:映像中的所有 .apk 文件都必须经过签名。Android 软件包管理器通过下列两种方式使用 .apk 签名:更换应用时,必须使用与旧应用相同的密钥对其签名,才能存取旧应用的数据。无论是通过覆盖 .a…...
亚马逊、沃尔玛卖家自养号退款经验和测评技术
今天给大家介绍下在做亚马逊、沃尔玛退款自养号中的经验,众所周知,自养号最重要的是养号的环境,包括系统的纯净度,下单的信用卡以及其他的一些细节。 环境系统市面上有很多,鱼龙混杂,比如什么lumi…...
Spring Security in Action 第十一章 SpringSecurity前后端分离实战
本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringSecurity相关知识相关知识,打造完整的SpringSecurity学习步骤,提升工程化编码能力和思维能力,写出高质量代码。希望大家都能够从中有所收获&#…...
高级前端二面vue面试题(持续更新中)
action 与 mutation 的区别 mutation 是同步更新, $watch 严格模式下会报错 action 是异步操作,可以获取数据后调用 mutation 提交最终数据 MVVM的优缺点? 优点: 分离视图(View)和模型(Model)ÿ…...
七大设计原则之依赖倒置原则应用
目录1 依赖倒置原则2 依赖倒置应用1 依赖倒置原则 依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构时,高层模块不应该依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节;细节应该依赖抽象。…...
Dubbo面试题2023
1、为什么要用Dubbo 随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务 的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、 …...
Swift(5)
目录 集合类型 数组 编辑 合集 合集操作 字典 Where 集合类型 Swift提供了三种主要的集合类型:组合,合集,字典。 数组是有序的值的集合。 合集是唯一值的无序集合。 字典是无序的键值对集合。 数组 Swift数组的类型的完整写法是…...
[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…...
算法思想 - 贪心算法
本文主要介绍算法中贪心算法的思想: 保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。贪心思想相关题目分配饼干455. Assign Cookies (Easy)Input: [1,2], [1,2,3] Output: 2Explanation: You have 2 children and 3 cookies. The greed factors of 2 …...
解决需求变更难题的8大方案
需求变更8大原因为什么会出现需求变更,这是由于需求约束、规则有了新的变化、由于政策发生变化,客户、沟通方式、流程化、标准化的问题等导致。这里在在过去的项目经验中,提出了常见的8大需求变更的原因。政策发生变化:指由于国家…...
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])…...
Vue3代码初体验找不同
文章目录🌟 写在前面🌟 代码分析🌟 写在最后🌟 写在前面 专栏介绍: 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相关技术文章,Vue 框架目前的地位大家应该都晓…...
opencv调取摄像头录制
大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…...
html标签手册
完整的HTML页面📑 ①基础标签📑📑📑 HTML <!DOCTYPE> 声明 !DOCTYPE声明必须是 HTML 文档的第一行,位于 html标签之前。 !DOCTYPE 声明不是 HTML 标签;它是指示 web 浏览器关于页面使用哪个 HTML 版…...
SpringMVC--视图、RESTful案例、处理AJAX请求
SpringMVC的视图 SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户 SpringMVC视图的种类很多,默认有转发视图和重定向视图 当工程引入jstl的依赖,转发视图会自动转换为JstlView 若使用的视图技术为…...
一个同学升了leader,今年活还没干,他就已经想好组里成员的两次绩效考核怎么打了,还说:leader都是这样的!...
绩效是大家都比较关注的事情,那么作为领导,一般是怎么打绩效的呢?一位网友爆料:一个大学同学升了leader,前段时间跟他吃饭,他说他已经想好了今年组里成员的两次绩效考核怎么打了。该网友有点吃惊࿰…...
Docker 面试知识点
Docker 是什么? 是实现容器技术的一种工具是一个开源的应用容器引擎使用 C/S 架构模式,通过远程API 来管理 (我们本机是 C,docker 引擎是 S,实际的构建过程是在 docker 引擎下完成的)可以打包一个应用及依赖包到一个轻量级、可移植的容器中 …...
C++高级篇学习笔记
文章目录 前言 本文记录C一些面试难点问题剖析。 1. 左右值和右值引用的作用 左值:可以在左边,表达式结束后依然存在的持久对象,一般有名字,可以取地址。 提示: 前置自加/自减 可以做左值; 右值在右边&a…...
gentoo基本安装过程
该文章是本人在gentoo官方安装文档的基础上简单总结的,也是本人自己实践过的,目前本人用的就是gentoo,对于真的需要安装gentoo的朋友,建议还是参考官方文档,说的比较详细,这个可以简单看看,可以…...
新媒体网页设计/纵横seo
首先查看win7和服务器的IP, WIN7在指令窗口使用ipconfig查看, linux在终端使用ifconfig查看, 然后检查win7能否Ping通linux, linux不一定要能Ping通win7。 如果需要linux ping win7,建议关闭win7中的防火墙,…...
有没有类似书签的wordpress主题/建立网站的主要步骤
准备两台Tomcat7与一个Redis集群。将jedis-2.9.0.jar、commons-pool2-2.4.2.jar、tomcat-redis-session-manager-2.1.0加入到两个Tomcat lib中。链接: https://pan.baidu.com/s/1dFvoUVB 密码: r333系统有多个JDK环境,需要将两个Tomcat7指定为JDK7,修改b…...
产品推广的网站怎么做/营销网站建设门户
转载自 TCP协议中的三次握手和四次挥手(图解) 其他写的比较好的 简析TCP的三次握手与四次分手 TCP的三次握手(建立连接)和四次挥手(关闭连接) TCP协议三次握手过程分析 TCP三次握手详解及释放连接过程 TCP/IP 相关知识点与面试题集 TCP/IP详解学习笔记&a…...
把网站制作成app/百度小说排名
whereis grafana /usr/share/grafana conf/defaults.ini 设置domain 设置enforce_domain true以便验证匹配上面的domain 按需设置root_url添加子目录, serve_from_sub_path true 修改后清空浏览器缓存避免apple-touch-icon.png和fav32.png的404 按需修改root_url %(proto…...
网站建设模板源代码/短视频运营培训学费多少
文章目录Q11.1 题目1.2 思路1.3 代码Q22.1 题目2.2 思路2.3 代码Q33.1 题目3.2 思路3.3 代码Q44.1 题目4.2 思路4.3 代码Q55.1 题目5.2 思路5.3 代码Q1 1.1 题目 利用递归方法求5!。 1.2 思路 递归公式:fnfn_1*4! 1.3 代码 def fact(j):sum 0if j 0:sum 1e…...
微商城 微网站制作/郑州seo培训
第一步 新建工程 新建工程选择开发板,进入vivado界面,这里就不多说了。 第二步 添加design souce 这一步就是写我们要测试的Verilog模块,因为只是仿真,所以我们不需要综合和实现,也因此我个人认为,在design souce里面的文件就不需要按照顶层到底层的方式写,而是将需要…...