高精度除法的实现
高精度除法与高精度加法的定义、前置过程都是大致相同的,如果想了解具体内容,可以移步至我的这篇博客:高精度加法计算的实现
在这里就不再详细讲解,只讲解主体过程qwq
主体过程
高精度除法的原理和小学学习的竖式除法是一样的。
概括来说,假如被除数长度为,除数长度为,为了减少冗余运算,我们从从后往前开始计算,将被除数与除数相对应的每一位相(整)除,实际上这一步可以看作一个逐次减法的过程,然后存进商的对应位置上,再将余数乘并放进下一位。
用高精度计算,先除百位,将减去一次后变为,小于,所以将存入百位,将存入十位;
再除十位,将减去三次后变为,小于,所以将存入十位,将存入个位;
最后除个位,将减去八次后变为,小于,所以将存入个位,将存入余数数组。
其实,高精度除法按理来说不需要反转存储,正序存储会更方便,但大部分题目,如果需要高精度除法去做,那么很有可能也需要其他的高精度计算,为了统一,我们还是使用反转存储。
接下来,我们这里实现一个函数,它判断了被除数以下标为最低位,是否可以再减去除数而保持非负。这个函数分为三部分:
- 被除数剩余的部分比除数长,这个情况下最多多出 1 位,函数返回真。
- 如第一步判断为假,就说明被除数与除数一样长,那我们就从高位到低位,逐位比较:如果被除数当前位比除数当前位大,函数返回真;反之,函数返回假。
- 如第二步也判断为假,就说明被除数与除数相等,相等的情形下也是可行的,函数返回真。
下面给出高精度除法的代码:
bool big(int a[],int b[],int low,int L){if(a[low+L]!=0) return 1;for(int i=L-1;i>=0;--i){if(a[low+i]>b[i]) return 1;if(a[low+i]<b[i])return 0;}return 1;
}
void div(int a[],int b[],int c[],int d[]){clear(c);clear(d);int la,lb;for(la=L-1;la>0;la--){if(a[la-1]!=0)break;}for(lb=L-1;lb>0;lb--){if(b[lb-1]!=0)break;}if(lb==0) return;for(int i=0;i<la;i++) d[i]=a[i];for(int i=la-lb;i>=0;i--){while(big(d,b,i,lb)){for(int j=0;j<lb;j++){d[i+j]-=b[j];if(d[i+j]<0){d[i+j+1]-=1;d[i+j]+=10;}}c[i]++;}}
}
高精度计算器(总结)
到这里,我们的高精度计算就全部完成了。
下面给出高精度计算器的代码:
const int L=10000;
string s;
int a[L],b[L],c[L],d[L];
void clear(int a[]){for(int i=0;i<L;i++)a[i]=0;
}
void read(int a[]){cin>>s;int L=s.size();for(int i=0;i<L;i++)a[i]=s[L-1-i]-'0';
}
void print(int a[]){int i;for(i=L-1;i>=1;i--){if(a[i]!=0)break;}for(;i>=0;i--)cout<<a[i];cout<<endl;
}
void add(int a[],int b[],int c[]){clear(c);for(int i=0;i<L-1;++i){c[i]+=a[i]+b[i];if(c[i]>=10){c[i+1]+=1;c[i]-=10;}}
}
void sub(int a[],int b[],int c[]){clear(c);for(int i=0;i<L-1;++i){c[i]+=a[i]-b[i];if(c[i]<0){c[i+1]-=1;c[i]+=10;}}
}
void mul(int a[],int b[],int c[]){clear(c);for(int i=0;i<L-1;i++){for(int j=0;j<=i;j++)c[i]+=a[j]*b[i-j];if(c[i]>=10){c[i+1]+=c[i]/10;c[i]%=10;}}
}
bool big(int a[],int b[],int low,int L){if(a[low+L]!=0) return 1;for(int i=L-1;i>=0;--i){if(a[low+i]>b[i]) return 1;if(a[low+i]<b[i])return 0;}return 1;
}
void div(int a[],int b[],int c[],int d[]){clear(c);clear(d);int la,lb;for(la=L-1;la>0;la--){if(a[la-1]!=0)break;}for(lb=L-1;lb>0;lb--){if(b[lb-1]!=0)break;}if(lb==0) return;for(int i=0;i<la;i++) d[i]=a[i];for(int i=la-lb;i>=0;i--){while(big(d,b,i,lb)){for(int j=0;j<lb;j++){d[i+j]-=b[j];if(d[i+j]<0){d[i+j+1]-=1;d[i+j]+=10;}}c[i]++;}}
}
每周六更新一篇文章,内容一般是自己总结的经验或是在其他网站上整理的优质内容
点个赞,关注一下呗~
相关文章:
高精度除法的实现
高精度除法与高精度加法的定义、前置过程都是大致相同的,如果想了解具体内容,可以移步至我的这篇博客:高精度加法计算的实现 在这里就不再详细讲解,只讲解主体过程qwq 主体过程 高精度除法的原理和小学学习的竖式除法是一样的。 …...
STM32CUBEMX配置USB虚拟串口
STM32CUBEMX配置USB虚拟串口 cubemx上默认配置即可。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 配置完后生成工程,主要就是要知道串口的收发接口就行了。 发送:CDC_Transmit_FS(),同时记得包含头文件#include “…...
安卓开发中margin和padding的区别
在 Android 开发中,margin 和 padding 都是用来定义视图(View)的空间属性,但它们的作用和应用场景有所不同: Margin(外边距): Margin 是视图与其他视图之间的空间。它定义了视图之间…...
Symfony事件调度系统:掌控应用程序生命周期的钥匙
Symfony事件调度系统:掌控应用程序生命周期的钥匙 引言 Symfony是一个高度灵活的PHP框架,用于构建各种规模的Web应用程序。它的核心特性之一是事件调度系统,该系统允许开发者在应用程序的生命周期中触发和监听事件。这种机制为开发者提供了…...
maven安装jar和pom到本地仓库
举例子我们要将 elastic-job-spring-boot-starter安装到本地的maven仓库,如下: <dependency><groupId>com.github.yinjihuan</groupId><artifactId>elastic-job-spring-boot-starter</artifactId><version>1.0.5&l…...
[leetcode]assign-cookies. 分发饼干
. - 力扣(LeetCode) class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(s.begin(), s.end());int m g.size(), n s.size();int count 0;for (int i 0, j 0; i…...
如何轻松解决复杂文档格式转换问题
上周,我遇到了一个棘手的问题:需要将一大堆PDF文件转换成可编辑的Word文档,时间紧迫,手动转换根本来不及。朋友推荐我使用了一个网站——xuelin.cc,这个网站不仅提供强大的AI对话功能,还能轻松完成各种文档…...
日期类(java)
文章目录 第一代日期类 Date常用构造方法SimpleDateFormat 日期格式化类日期转字符串(String -> Date)字符串转日期 (String->Date) 第二代日期类 Calendar常用字段与如何得到实例对象相关 API 第三代日期类(LocalDate\TIme)日期,时间&…...
【深度学习】C++ Tensorrt Yolov8 目标检测推理
C Tensorrt Yolov8 目标检测推理 模型导出代码yolov8.hyolov8.cppcommon.hppCMakeListmain.cpp C tensorrt对yolov8目标检测模型进行推理。 Windows版本下只需要修改common.hpp对文件的判断S_ISREG 和对文件夹的判断S_ISDIR即可,非核心代码,不调用删掉都…...
【项目日记(二)】搜索引擎-索引制作
❣博主主页: 33的博客❣ ▶️文章专栏分类:项目日记◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多项目内容 目录 1.前言2.索引结构2.1创捷索引2.2根据索引查询2.3新增文档2.4内存索引保存到磁盘2.5把…...
K 近邻、K-NN 算法图文详解
1. 为什么学习KNN算法 KNN是监督学习分类算法,主要解决现实生活中分类问题。根据目标的不同将监督学习任务分为了分类学习及回归预测问题。 KNN(K-Nearest Neihbor,KNN)K近邻是机器学习算法中理论最简单,最好理解的算法…...
Eclipse + GDB + J-Link 的单片机程序调试实践
Eclipse GDB J-Link 的调试实践 本文介绍如何创建Eclipse的调试配置,如何控制调试过程,如何查看修改各种变量。 对 Eclipse 的要求 所用 Eclipse 应当安装了 Eclipse Embedded CDT 插件。从 https://www.eclipse.org/downloads/packages/ 下载 Ecli…...
前端代码生成辅助工具
1,Axure Axure设计的界面如何生成HTML文件 https://blog.csdn.net/qq_43279782/article/details/112387511 Axure 生成HTML 文件,并用Chrome打开 https://blog.csdn.net/qq_30718137/article/details/80621025 2,OpenUI [开源] OpenUI …...
静态库与动态库总结
一、库文件和头文件 所谓库文件,可以将其理解为压缩包文件,该文件内部通常包含不止一个目标文件(也就是二进制文件)。 值得一提的是,库文件中每个目标文件存储的代码,并非完整的程序,而是一个…...
深入解析tcpdump:网络数据包捕获与分析的利器
引言 在网络技术日新月异的今天,网络数据包的捕获与分析成为了网络管理员、安全专家以及开发人员不可或缺的技能。其中,tcpdump作为一款强大的网络数据包捕获分析工具,广泛应用于Linux系统中。本文将从技术人的角度,详细分析tcpdu…...
【漏洞复现】科立讯通信有限公司指挥调度管理平台uploadgps.php存在SQL注入
0x01 产品简介 科立讯通信指挥调度管理平台是一个专门针对通信行业的管理平台。该产品旨在提供高效的指挥调度和管理解决方案,以帮助通信运营商或相关机构实现更好的运营效率和服务质量。该平台提供强大的指挥调度功能,可以实时监控和管理通信网络设备、…...
什么是自然语言处理(NLP)?详细解读文本分类、情感分析和机器翻译的核心技术
什么是自然语言处理? 自然语言处理(Natural Language Processing,简称NLP)是人工智能的一个重要分支,旨在让计算机理解、解释和生成人类的自然语言。打个比方,你和Siri对话,或使用谷歌翻译翻译一…...
【linux】gcc快速入门教程
目录 一.gcc简介 二.gcc常用命令 一.gcc简介 gcc 是GNU Compiler Collection(GNU编译器套件)。就是一个编译器。编译一个源文件的时候可以直接使用,但是源文件数量太多时,就很不方便,于是就出现了make 工具 二.gcc…...
【多维动态规划】Leetcode 97. 交错字符串【中等】
交错字符串 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串 子字符串 是字符串中连续的 非空 字符序列。 s s1 s2 … snt…...
【JavaScript脚本宇宙】精通前端开发:六大热门CSS框架详解
前端开发的利器:深入了解六大CSS框架 前言 在现代Web开发中,选择适合的前端框架和工具包是构建高效、响应式和美观的网站或应用程序的关键。本文将详细介绍六个广受欢迎的CSS框架:Bootstrap、Bulma、Tailwind CSS、Foundation、Materialize…...
开发技术-Java集合(List)删除元素的几种方式
文章目录 1. 错误的删除2. 正确的方法2.1 倒叙删除2.2 迭代器删除2.3 removeAll() 删除2.4 removeIf() 最简单的删除 3. 总结 1. 错误的删除 在写代码时,想将其中的一个元素删除,就遍历了 list ,使用了 remove(),发现效果并不是想…...
c++ 递归
递归函数是指在函数定义中调用自身的函数。C语言也支持递归函数。 下面是一个使用递归函数计算阶乘的例子: #include <iostream> using namespace std;int factorial(int n) {// 基本情况,当 n 等于 0 或 1 时,阶乘为 1if (n 0 || n…...
RedHat9 | podman容器
1、容器技术介绍 传统问题 应用程序和依赖需要一起安装在物理主机或虚拟机上的操作系统应用程序版本比当前操作系统安装的版本更低或更新两个应用程序可能需要某一软件的不同版本,彼此版本之间不兼容 解决方式 将应用程序打包并部署为容器容器是与系统的其他部分…...
边缘计算项目有哪些
边缘计算项目在多个领域得到了广泛的应用,以下是一些典型的边缘计算项目案例: 1. **智能交通系统**:通过在交通信号灯、监控摄像头等设备上部署边缘计算,可以实时分析交通流量,优化交通信号控制,减少拥堵&…...
计算fibonacci数列每一项时所需的递归调用次数
斐波那契数列是一个经典的数列,其中每一项是前两项的和,定义为: [ F(n) F(n-1) F(n-2) ] 其中,( F(0) 0 ) 和 ( F(1) 1 )。 对于计算斐波那契数列的第 ( n ) 项,如果使用简单的递归方法,其时间复杂度是…...
【教学类65-05】20240627秘密花园涂色书(中四班练习)
【教学类65-03】20240622秘密花园涂色书03(通义万相)(A4横版1张,一大 68张纸136份)-CSDN博客 背景需求: 打印以下几款秘密花园样式(每款10份)给中四班孩子玩一下,看看效果 【教学类…...
Python 学习之基础语法(一)
Python的语法基础主要包括以下几个方面,下面将逐一进行分点表示和归纳: 一、基本语法 1. 注释 a. 单行注释:使用#开头,例如# 这是一个单行注释。 b. 多行注释:使用三引号(可以是三个单引号或三个双引号&…...
日志分析-windows系统日志分析
日志分析-windows系统日志分析 使用事件查看器分析Windows系统日志 cmd命令 eventvwr 筛选 清除日志、注销并重新登陆,查看日志情况 Windows7和Windowserver2008R2的主机日志保存在C:\Windows\System32\winevt\Logs文件夹下,Security.evtx即为W…...
【ARM】MDK工程切换高版本的编译器后出现error A1137E报错
【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决工程从Compiler 5切换到Compiler 6进行编译时出现一些非语法问题上的报错。 2、 问题场景 对于一些使用Compiler 5进行编译的工程,要切换到Compiler 6进行编译的时候,原本无任何报错警告…...
深入 SSH:解锁本地转发、远程转发和动态转发的潜力
文章目录 前言一、解锁内部服务:SSH 本地转发1.1 什么是 SSH 本地转发1.2 本地转发应用场景 二、打开外部访问大门:SSH 远程转发2.1 什么是 SSH 远程转发2.2 远程转发应用场景 三、动态转发:SSH 让你拥有自己的 VPN3.1 什么是 SSH 动态转发3.…...
建设什么网站可以赚钱/安徽网站seo
默认解压到当前目录import shutil shutil.unpack_archive(/root/redis-3.2.3.tar.gz)解压到home目录下import shutil shutil.unpack_archive(/root/redis-3.2.3.tar.gz,/home/) 转载于:https://www.cnblogs.com/effortsing/p/10339188.html...
wordpress外贸建站教程/网站seo优化服务商
计算机网络-Reports-3计算机网络第三章DIY!now电子版实验报告班 级:姓 名:学 号:完成时间:[注]每个实验问题回答时可以采用截图辅助说明;实验报告(包含数据)打包成rar文件,传到Reports文件夹&am…...
肇庆城乡建设网站/北京seo外包 靠谱
Reconciliation React 的关键设计目标是使 API 看起来就像每一次有数据更新的时候,整个应用重新渲染了一样。这就极大地简化了应用的编写,但是同时使 React 易于驾驭,也是一个很大的挑战。这篇文章解释了我们如何使用强大的试探法来将 O(n3) …...
什么网站做前端练手好/四川网站推广公司
这篇文章的开始先给大家看一个图片 image用过或者看过springboot的人都知道,这就是springboot启动的banner,这一篇介绍如何自定义springboot的启动bannner。 先介绍一个可以制作自定义banner的网站,传送门:http://patorjk.com/sof…...
虚拟商品购物网站源码/武汉网站建设方案优化
助记词 -> 种子 -> 私钥 -> 公钥 -> 地址 公钥映射成地址的时候会加入ss58参数(ss58是不同链的唯一标识),因此根据地址可以解析出这个地址是哪条链的地址。 生成助记词后如何获取address? 根据keystore文件导入账户是需要验证密码的,钱包…...
快速网站收录/百度云盘资源共享链接群组链接
linux下构建DNS服务器BINDDNS:域名解析。域名分类v 顶级域由两三个字母组成的名称用于指示国家地区或使用名称的单位的类型。如v 组织域.net, .com, .org,.mil, .edu, .gov, .cc, .mobiv 国家域.jp, .tw, .hk, .iq,.ir, .cn, .uk, .us全球有13台根服务器v A INTERNIC.NET美国弗…...