C++知识点总结(7):玩转高精度除法
一、复习高低精度
一个数分为两种类型:
1. 高精度数,即一个长度特别长的数,使用 long long 也无法存储的一类数字。
2. 低精度数,即一个普通的数,可以使用 long long 来存储。
由于高精度除法比较简单,建议大家摸透了高精度加减法和高精度乘法的逻辑(戳蓝色文字进入课程快览)。
二、复习高精度乘法
1. 一共有两个 for 循环,第一个 for 循环遍历第一个因数,第二个 for 循环遍历第二个因数。
2. for 循环中的值分别是 j = 0 ~ lenb-1,i = 0 ~ lena-1。
3. 计算逻辑:
ans[i+j] = a[i] * b[j] + in + ans[i+j];
4. 输出:
【去前导零】while (ans[len_ans-1] == 0 && len_ans > 1) len_ans--;
【正常逆序输出】ans[len_ans-1] ~ ans[0]
三、存储的基础类型
输入的高精度被除数: char 类型
转换后的高精度被除数: int 类型
低精度除数: int 类型
高精度被除数的位数: int 类型
存储结果: char 类型
答案的长度: int 类型
四、输入与转换
#include <iostream>
#include <cstring>
using namespace std;int main()
{// 存储并输入char a_str[1005] = {};int b;cin >> a_str >> b;// 转换int a[1005] = {};int len_a = strlen(a_str);for (int i = 0; i <= len_a-1; i++){a[i] = a_str[i] - 48; // 正序存储 } return 0;
}
五、计算过程
#include <iostream>
#include <cstring>
using namespace std;int main()
{// 存储并输入char a_str[1005] = {};int b;cin >> a_str >> b;// 转换int a[1005] = {};int len_a = strlen(a_str);for (int i = 0; i <= len_a-1; i++){a[i] = a_str[i] - 48; // 正序存储 }// 计算int len_ans = len_a; // 计算次数int ans[1005] = {};int rem = 0; // 余数 for (int i = 0; i <= len_ans-1; i++){ans[i] = (rem * 10 + a[i]) / b; // 写商rem = (rem * 10 + a[i]) % b; // 写余}// 去前导零int k = 0; // k 表示第一个不为 0 元素的下标while (ans[k] == 0 && k < len_ans-1){k++;}// 正常正序输出for (int i = k; i <= len_ans-1; i++){cout << ans[i];}return 0;
}

看一下运行的效果:

六、小数点优化
#include <iostream>
#include <cstring>
using namespace std;int main()
{// 存储并输入char a_str[1005] = {};int b;int point = 3; // 保留小数的数位 cin >> a_str >> b;// 转换int a[1005] = {};int len_a = strlen(a_str);for (int i = 0; i <= len_a-1; i++){a[i] = a_str[i] - 48; // 正序存储 }// 计算int len_ans = len_a; // 计算次数int ans[2100] = {};int rem = 0; // 余数 for (int i = 0; i <= len_ans+point-1; i++){ans[i] = (rem * 10 + a[i]) / b; // 写商rem = (rem * 10 + a[i]) % b; // 写余}// 去前导零int k = 0; // k 表示第一个不为 0 元素的下标while (ans[k] == 0 && k < len_ans-1){k++;}// 正常正序输出整数部分 for (int i = k; i <= len_ans-1; i++){cout << ans[i];}// 小数点后判断 if (point > 0){cout << ".";for (int i = len_ans; i <= len_ans+point-1; i++){cout << ans[i]; }}return 0;
}
附录:两数的平均数
#incldue <iostream>
#include <cstring>
using namespace std;int main()
{// 高精度加法// 输入并存储 char a_str[1005] = {};char b_str[1005] = {};cin >> a_str >> b_str;int a[1005] = {};int b[1005] = {};int len_a = strlen(a_str);int len_b = strlen(b_str);for (int i = 0; i <= len_a-1; i++){a[len_a-i-1] = a_str[i] = 48;}for (int i = 0; i <= len_b-1; i++){b[len_b-i-1] = b_str[i] = 48;}// 计算int sum[1005] = {};int len_sum = max(len_a, len_b);int in = 0;for (int i = 0; i <= len_sum-1; i++){sum[i] = a[i] + b[i] + in;in = sum[i] / 10;sum[i] %= 10;}// 最高位判断if (in){sum[len_sum] = in;len_sum++;}// 高精度除法int divid[1005] = {};// 正序存储for (int i = 0; i <= len_sum-1; i++){divid[len_sum-i-1] = sum[i]; }// 计算int len_ans = len_sum;int ans[1005] = {};int rem = 0;for (int i = 0; i <= len_ans-1; i++){ans[i] = (rem * 10 + divid[i]) / 2;rem = (rem * 10 + divid[i]) % 2;}// 去前导零int k = 0;while (ans[k] == 0 && k < len_ans-1){k++;}// 输出平均数for (int i = k; i <= len_ans-1; i++){cout << ans[i];}return 0;
}
相关文章:
C++知识点总结(7):玩转高精度除法
一、复习高低精度 一个数分为两种类型: 1. 高精度数,即一个长度特别长的数,使用 long long 也无法存储的一类数字。 2. 低精度数,即一个普通的数,可以使用 long long 来存储。 由于高精度除法比较简单,…...
LeetCode算法题解(动态规划,背包问题)|LeetCode1049. 最后一块石头的重量 II、LeetCode494. 目标和
一、LeetCode1049. 最后一块石头的重量 II 题目链接:1049. 最后一块石头的重量 II 题目描述: 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将…...
使用Pytorch从零开始构建LSTM
长短期记忆(LSTM)网络已被广泛用于解决各种顺序任务。让我们了解这些网络如何工作以及如何实施它们。 就像我们一样,循环神经网络(RNN)也可能很健忘。这种与短期记忆的斗争导致 RNN 在大多数任务中失去有效性。不过&a…...
qRT-PCR相对定量计算详解qPCR相对定量计算方式——2^-(∆∆Ct) deta t
做完转录组分析之后,一般都要求做qRT-PCR来验证二代测序得到的转录本表达是否可靠。荧光定量PCR是一种相对表达定量的方法,他的计算方法有很多,常用的相对定量数据分析方法有双标曲线法,ΔCt法,2^-ΔΔCt法(Livak法)&a…...
BART non-Cartesian 重建:并行成像 压缩感知
本文主要使用并行成像和压缩感知方法实现non-Cartesian MRI 数据的重建。 目录 1 自定义MRI kspace trajectory 2 自定义该 trajectory下的多通道MRI数据 3 使用NUFFT 直接做欠采样数据的重建...
UDP客户端使用connect与UDP服务器使用send函数和recv函数收发数据
服务器代码编译运行 服务器udpconnectToServer.c的代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<arpa/inet.h> #include<sys/socket.h> #include<errno.h> #inclu…...
SLAM ORB-SLAM2(9)闭环检测器
SLAM ORB-SLAM2(9)闭环检测器 1. LoopClosing2. 成员变量2.1. 系统成员变量2.2. 关键帧2.3. 共视关系2.4. 闭环检测2.5. 全局 BA(光束法平差)2.6. 其他操作3. 成员函数3.1. 构造函数3.2. 主要函数3.3. 更新操作3.4. 标识设置和查询接口1. LoopClosing 在《SLAM ORB-SLAM2(…...
目标检测YOLO系列从入门到精通技术详解100篇-【目标检测】SLAM(基础篇)(二)
目录 知识储备 概率论基础 边缘概率 联合概率和独立 独立与条件独立...
TikTok 将开源“云中和”边缘加速器
“从某种意义上说,我们正在努力破解云的骨干网,以造福于我们,”TikTok产品管理基础设施经理Vikram Siwach指出,他解释了该公司即将开源的“全球服务加速器”的好处,这是一个可编程的边缘平台,可将应用程序需…...
【通讯协议】REST API vs GraphQL
在API设计方面,REST和GraphQL各有缺点。下图显示了 REST 和 GraphQL 之间的快速比较。 REST 使用标准 HTTP 方法(如 GET、POST、PUT、DELETE)进行 CRUD 操作。当您需要在单独的服务/应用程序之间提供简单、统一的接口时,效果很好…...
Linux在安装epel-release时,报错epel-release-7-14.noarch.rpm 的公钥尚未安装
Linux在安装epel-release时报错: [rootXWDBDEV01 ~]# yum install epel-release 已加载插件:fastestmirror, langpacks, product-id, search-disabled-repos, subscription-managerThis system is not registered with an entitlement server. You can …...
在 STM32 上实现温度补偿和校正
本文介绍了如何在 STM32 微控制器上实现温度补偿和校正,以提高温度传感器的测量精度。首先,我们将简要介绍温度补偿和校正的原理和目的。然后,我们将详细讨论在 STM32 上实现温度补偿和校正的步骤和方法。同时,提供了一个简单的示…...
PasteNow for mac剪贴板工具
PasteNow 是一款简单易用的剪贴板管理工具,可帮助用户快速存储和管理剪贴板上的文本和图片内容。用户可以使用 PasteNow 软件快速将文本内容保存到不同的笔记或页面中,也可以方便地将剪贴板上的图片保存到本地或分享给其他应用程序。 此外,P…...
Spark---补充算子
一、Spark补充Transformation算子 1、join,leftOuterJoin,rightOuterJoin,fullOuterJoin 作用在K,V格式的RDD上。根据K进行连接,对(K,V)join(K,W)返回(K,&a…...
第一百八十回 介绍两种阴影效果
文章目录 1. 概念介绍2. 实现方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"自定义SlideImageSwitch组件"相关的内容,本章回中将介绍两种阴影效果.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在…...
MyBatisPlus入门介绍
目录 一、MyBatisPlus介绍 润物无声 效率至上 丰富功能 二、Spring集成MyBatisPlus 三、SpringBoot集成MyBatisPlus 一、MyBatisPlus介绍 MyBatis-Plus(简称 MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,…...
详解分布式微服务架构
目录 一、微服务简介 1、分布式微服务架的诞生 2、微服务架构与SOA架构的区别 3、微服务框架引来的问题 二、服务通信 RESTful API: 消息队列(如RabbitMQ、Kafka): gRPC: GraphQL: Service Mesh&…...
Navicat 技术指引 | 适用于 GaussDB 的用户权限设置
Navicat Premium(16.2.8 Windows版或以上) 已支持对 GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结构同步、协同合作、数据迁移等),这…...
究极短的快排代码【QuickSort】
快排 QuickSort 两边向中间扫描法:取一个基点值,从左往右扫描,基点值左边所有元素小于它,遇到大于基点值的则停下,开始从右往左扫描,右边所有元素大于他,遇到小于基点值则停下,如果…...
MUYUCMS v2.1:一款开源、轻量级的内容管理系统
MuYuCMS:一款基于Thinkphp开发的轻量级开源内容管理系统,为企业、个人站长提供快速建站解决方案。它具有以下的环境要求: 支持系统:Windows/Linux/Mac WEB服务器:Apache/Nginx/ISS PHP版本:php > 5.6 (…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
