【算法基础】高精度除法

news2024/10/6 6:46:25

在这里插入图片描述

👦个人主页:Weraphael
✍🏻作者简介:目前是C语言 + 算法学习者
✈️专栏:【C/C++】算法
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍


前言

往期我们学习了高精度加法、高精度减法 和 高精度乘法,本站就是高精度算法最后一站了!闲言少叙,开快车🚝🚝


目录

  • 前言
  • 一、算法由来
  • 二、算法基本思想
  • 三、算法思路
  • 四、代码模板

一、算法由来

前提:两个数都是正整数。当被除数的位数非常长时,再同时除以上位数较短的b。最后结果大到unsigned long long都存不了,这就要用到高精度除法。

二、算法基本思想

高精度算法同样也是计算机模拟人类竖式计算,并将其转化计算机语言的过程。

现在来回忆一下,小学除法我们是如何列竖式来解决的

在这里插入图片描述

三、算法思路

  • 首先,我们用数组存高精度数字(被除数)。为了方便读入,采用字符串读入。为什么要采用字符串读入呢?原因是数据位数过长
  • 其次,将其转化成数字存进vector<int>数组中。存进数组的时候一定要=倒着存入。
  • 然后,就是两数相除的过程了,初始化余数t = 0,两数相除,t = t * 10 + A[i] t临时用来存储每一次余数的结果。
  • 对于答案,只需要t / b即是,为了保留上一步的余数t,只需要将t = t % b
  • 再次重复以上操作,直到被除数全部都遍历完为止
  • 在除法运算中,计算顺序是从高位向低位开始运算,因此A的前导0是在vector的前面而不是尾部(详情见算法基本思想),因此为了方便去除前导0,我们将A翻转,这样0就位于数组尾部,可以使用pop函数删除前导0
  • 最后再逆序输出结果就是答案,输出t就是余数

四、代码模板

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> div(vector<int> &A, int b, int &t)
{
    
    vector<int> C;//存储答案
    t = 0;//初始化余数为0
    
    //除法从高位开始算起
    for (int i = A.size() - 1; i >= 0; i -- )
    {
        //上一次的余数乘10,再加上当前位上的数,就是被除数
        t = t * 10 + A[i];
        //商的计算
        C.push_back(t / b);
        //保留下一次的余数
        t %= b;
    }
    //翻转是为了方便取出前导0
    reverse(C.begin(), C.end());
    //去除前导0
    while (C.size() > 1 && C.back() == 0) 
    {
        C.pop_back();
    }
    //返回答案
    return C;
}

int main()
{
    string a;//字符串读入被除数
    int b; //除数
    int t; //余数
    vector<int> A; 

    //读入
    cin >> a >> b;
    
    //倒序存入A中
    for (int i = a.size() - 1; i >= 0; i -- ) 
    {
        A.push_back(a[i] - '0');
    }

    vector<int> C = div(A, b, t);

    //输出商
    for (int i = C.size() - 1; i >= 0; i -- ) 
    {
        printf("%d",C[i]);    
    }
    
    //输出余数
    printf("\n%d\n",t);

    return 0;
}

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

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

相关文章

PN外加电场后电场变化

没有外加电场时&#xff08;下面都是以外加反向电场分析&#xff09; 中间两条实线假设是PN节在没有外加电场的情况下形成的一个内部电场边界。 形成原因 实用的半导体一般是混合物 P型半导体&#xff0c;实际上是一种4价和3价元素的混合物。化学中都知道达到4或8的外层电子…

论文浅尝 | KGE by Adaptive Limit Scoring Loss Using DWS

笔记整理&#xff1a;陈磊&#xff0c;天津大学硕士链接&#xff1a;https://ieeexplore.ieee.org/ielx7/6287639/7859429/08057770.pdf动机设计一个强大而有效的损失框架对于知识图嵌入模型区分正确和不正确的三元组至关重要。经典的基于边距的排名损失将正负三元组的分数限制…

极智AI | 算能SDK架构

欢迎关注我的公众号 [极智视界]&#xff0c;获取我的更多经验分享 大家好&#xff0c;我是极智视界&#xff0c;本文介绍一下 算能SDK架构。 邀您加入我的知识星球「极智视界」&#xff0c;星球内有超多好玩的项目实战源码下载&#xff0c;链接&#xff1a;https://t.zsxq.com…

华芯微特开发环境搭建-SWM34SVET6为例

SWM34S系列是cortex-M33&#xff0c;内核是arm-v8指令集&#xff0c;和其他cortex系列有差异&#xff0c;要新的工具版本支持&#xff08;jlink要升级到V9以上&#xff0c;keil要升级到5.32以上&#xff09;。 1.Keil要先安装5.36的版本&#xff0c;并取得版权&#xff08;5.3…

【MYSQL中级篇】数据库数据查询学习

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 相关文章 文章名文章地址【MYSQL初级篇】入门…

网络安全-Kali更新源(APT)

网络安全-Kali更新源(APT&#xff09; 这篇东东很少内容 Kali是基于乌班图开发出来的 这个APT不是攻击的那个APT 这个APT和centos里面的YUM是一样的 下面是介绍的一些国内的APT包&#xff0c;我自己用的阿里云 通俗点怎么理解呢&#xff0c;你手机里面的应用市场&#xff0c;苹…

【闲聊】我用ChatGPT参加了大数据面试

用Chat GPT试了试面试题&#xff0c;回答得比较简单。 问&#xff1a;你可以以应聘者的身份参加一场大数据程序员面试吗 答&#xff1a;可以 &#xff0c;如果您符合面试要求&#xff0c;可以参加大数据程序员面试。 问&#xff1a;那么为什么你要投递大数据开发这个岗位 答&am…

数据结构总结

数据结构总结排序算法冒泡排序选择排序插入排序希尔排序堆排序快速排序算法归并排序计数排序基数排序树红黑树基本概念规则B树基础知识规则B树图回溯算法并查集拓扑排序其他算法KMP算法例题数组类求最大和子数组求子数组最大乘积删除重复链表元素十大排序算法参考 排序算法 冒…

16:00面试,16:09就出来了 ,问的实在是太...

从外包出来&#xff0c;没想到算法死在另一家厂子 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到8月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个兄弟内…

情人节快到了,我部署了一套情侣头像小程序,并过审了

最近在学习如何部署微信小程序&#xff0c;目的就是像拥有一个属于自己的小程序 之前做的是一个微信公众号&#xff0c;靠自然的流量虽然也开通了流量主&#xff0c;但是每天收益就是那0.0几的,所有寻思看能不能做一个小程序出来。不会写小程序的我&#xff0c;也只能用现成的…

IO流01_字节字符流、缓冲流、标准输入、输出流、打印流

文章目录①. IO流概述及分类②. 字节输入流 - FileInputStream③. 字节输出流 - FileOutputStream④. 字符输入流 - FileReader⑤. 字符输出流 - FileWriter⑥. 字节缓冲流 - Buffered⑦. 掌握 - 相关流习题操作⑧. 标准输入、输出流(了解)⑨. 打印流 - PrintStream、PrintWrit…

Retinanet网络与focal loss损失

1.损失函数 1&#xff09;原理 本文一个核心的贡献点就是 focal loss。总损失依然分为两部分&#xff0c;一部分是分类损失&#xff0c;一部分是回归损失。 在讲分类损失之前&#xff0c;我们来回顾一下二分类交叉熵损失 &#xff08;binary_cross_entropy&#xff09;。 计…

算法设计与分析(屈婉玲)视频笔记day2

序列求和的方法 数列求和公式 等差、等比数列与调和级数 求和的例子 二分检索算法 二分检索运行实例 2 n 1个输入 比较 t 次的输入个数 二分检索平均时间复杂度 估计和式上界的放大法 放大法的例子 估计和式渐近的界 估计和式渐近的界 小结 • 序列求和基本公式&#xff1a;…

使用 CSS 变量更改多个元素样式

使用 CSS 变量更改多个元素样式 var() 函数用于插入自定义的属性值&#xff0c;如果一个属性值在多处被使用&#xff0c;该方法就很有用。 custom-property-name 是必需的, 自定义属性的名称&#xff0c;必需以 – 开头。 value 可选。备用值&#xff0c;在属性不存在的时候使…

牛客网Python篇数据分析习题(六)

1.某公司计划举办一场运动会&#xff0c;现有运动会项目数据集items.csv。 包含以下字段&#xff1a; item_id&#xff1a;项目编号&#xff1b; item_name:项目名称&#xff1b; location:比赛场地。 有员工报名情况数据集signup.csv。包含以下字段&#xff1a; employee_id&a…

高性能(二)

三、读写分离和分库分表 1.读写分离 1.1 概述 将数据库的读写操作分散到不同的数据库节点上 通常一主多从一台主数据库负责写&#xff0c;多台从数据库负责读。 主库和从库之间会进行数据同步&#xff0c;以保证从库中数据的准确性。 1.2 问题及解决 1.2.1 问题 主从同…

ChatGPT眼中的产品经理是这样的

在玩ChatGPT的时候&#xff0c;突发奇想&#xff0c;ChatGPT对产品经理的认知是啥样呢&#xff1f;于是我找了几个大家都比较关注的产品经理问题&#xff0c;看看ChatGPT是如何回答的。1、产品经理可以干一辈子嘛&#xff1f;2、产品经理的核心竞争力是啥&#xff1f;3、产品经…

【本周特惠课程】深度学习6大模型部署场景(Pytorch+NCNN+MNN+Tengine+TensorRT+微信小程序)速成!...

前言欢迎大家关注有三AI的视频课程系列&#xff0c;我们的视频课程系列共分为5层境界&#xff0c;内容和学习路线图如下&#xff1a;第1层&#xff1a;掌握学习算法必要的预备知识&#xff0c;包括Python编程&#xff0c;深度学习基础&#xff0c;数据使用&#xff0c;框架使用…

操作系统——1.操作系统的概念、定义和目标

目录 1.概念 1.1 操作系统的种类 1.2电脑的组成 1.3电脑组成的介绍 1.4操作系统的概念&#xff08;定义&#xff09; 2.操作系统的功能和目标 2.1概述 2.2 操作系统作为系统资源的管理者 2.3 操作系统作为用户和计算机硬件间的接口 2.3.1用户接口的解释 2.3.2 GUI 2.3.3接…

代码随想录第十一天(459)

文章目录459. 重复的子字符串答案思路暴力破解移动匹配459. 重复的子字符串 也不知道为啥这个提示简单题…… 答案思路 暴力破解 例如&#xff1a;abcabc 移位一次&#xff1a;cabcab 移位两次&#xff1a;bcabca 移位三次&#xff1a;abcabc 现在字符串和原字符串匹配了…