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 (…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
