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; 
}

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

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

相关文章

卸载11.3的cuda,安装11.8的cuda及cudnn

linux查看cudnn版本_linux查看cudnn版本命令_在学习的王哈哈的博客-CSDN博客文章浏览阅读2.9k次&#xff0c;点赞6次&#xff0c;收藏6次。英伟达官方文档查看cuda版本cat /usr/local/cuda/version.txt或者nvcc --version 或者 nvcc -V查看cudnn版本网上都是这个但是不行cat /u…

【超强笔记软件】Obsidian实现免费无限流量无套路云同步

【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步&#xff1f; 目录 一、简介 软件特色演示&#xff1a; 二、使用免费群晖虚拟机搭建群晖Synology Drive服务&#xff0c;实现局域网同步 1 安装并设置Synology Drive套件 2 局域网内同步文件测试 三、内网穿透群…

Stable-Diffusion——Windows部署教程

Windows 参考文章&#xff1a;从零开始&#xff0c;手把手教你本地部署Stable Diffusion Webui AI绘画(非最新版) 一键脚本安装 默认环境安装在项目路径的venv下 conda create -n df_env python3.10安装pytorch&#xff1a;&#xff08;正常用国内网就行&#xff09; python -…

【Python篇】详细讲解正则表达式

文章目录 &#x1f339;什么是正则表达式&#x1f354;语法字符类别重复次数组合模式 ✨例子 &#x1f339;什么是正则表达式 正则表达式&#xff08;Regular Expression&#xff09;&#xff0c;简称为正则或正则表达式&#xff0c;是一种用于匹配、查找和操作文本字符串的工…

Linux:docker基础操作(3)

docker的介绍 Linux&#xff1a;Docker的介绍&#xff08;1&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/134146721?spm1001.2014.3001.5502 通过yum安装docker Linux&#xff1a;Docker-yum安装&#xff08;2&#xff09;-CSDN博客https://blog.…

华为OD机试2023年最新题库(Python、JAVA、C++、JS)

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2023年11月份开始&#xff0c;考的都是OD统一考试&#xff08;C卷&#xff09;&#xff0c;题库已经整…

mysql使用--存储程序

1.概述 存储程序可以封装一些语句&#xff0c;为用户提供一种简单的方式来调用这个存储程序&#xff0c;从而间接执行其封装的语句。 根据调用方式的不同&#xff0c;可把存储程序分为存储例程、触发器、事件几种类型。其中&#xff0c;存储例程又可被细分为存储函数和存储过程…

openssl+ ECC + linux 签名校验开发实例(C++)

文章目录 ECC签名过程&#xff08;ECDSA签名&#xff09;ECC验证过程&#xff08;ECDSA验证&#xff09;C示例代码 ECC&#xff08;Elliptic Curve Cryptography&#xff09;是一种基于椭圆曲线数学结构的密码学技术。在ECC中&#xff0c;签名和验证过程使用的是数字签名算法&a…

力扣.NO88 合并两个有序数组

题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#xff0c;合并…

2 时间序列预测入门:GRU

0 论文地址 GRU 原论文&#xff1a;https://arxiv.org/pdf/1406.1078v3.pdf GRU&#xff08;Gate Recurrent Unit&#xff09;是循环神经网络&#xff08;RNN&#xff09;的一种&#xff0c;可以解决RNN中不能长期记忆和反向传播中的梯度等问题&#xff0c;与LSTM的作用类似&a…

C语言第三十弹---打印一个整数的每一位数

C语言实现打印整数的每一位数 逆序打印整数 思路&#xff1a;通过n%10可以获得整数的个位&#xff0c;获得个位后&#xff0c;整数/10就看去掉个位&#xff0c;得到新的一个数。循环即可获得所有数。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>void print(i…

设计模式-开篇

什么是设计模式 设计模式是一种被反复使用、多数人知晓的、经过分类编目的代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、提高代码的可靠性。设计模式不是可直接转化为代码的完成解决方案&#xff0c;而是描述了如何解决一个问题的经过&#xf…

图论——二部图及其算法

什么是二部图 二部图的判定 例子1 任选一个节点染成红色 红色的邻居染成蓝色 蓝色邻居染成红色 例子2 这个不是二部图 无权二部图的最大匹配

Jacobi迭代与SOR迭代求解希尔伯特矩阵

给出线性方程组 Hn*x b&#xff0c;其中系数矩阵Hn为希尔伯特矩阵&#xff1a; 假设 x ∗ (1, 1, . . . , 1)T&#xff0c;b Hnx ∗。若取 n 6,8, 10&#xff0c;分别用 Jacobi 迭代法及 SOR迭代&#xff08;ω 1, 1:25,1:5&#xff09;求解&#xff0c;比较计算结果。…

leetcode做题笔记1457. 二叉树中的伪回文路径

给你一棵二叉树&#xff0c;每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的&#xff0c;当它满足&#xff1a;路径经过的所有节点值的排列中&#xff0c;存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。 示例 1&#xff1a; 输…

【计算机网络笔记】多路访问控制(MAC)协议——随机访问MAC协议

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

Error PostCSS plugin autoprefixer requires PostCSS 8

文章目录 一、情况一二、情况二三、总结 在启动 vue项目时&#xff0c;突然控制台报错&#xff1a; Error: PostCSS plugin autoprefixer requires PostCSS 8。然后依次出现下面几种情况&#xff0c;依次解决完&#xff0c;项目就可以正常启动了 一、情况一 error in ./src/…

万宾科技可燃气体监测仪的功能有哪些?

随着城市人口的持续增长和智慧城市不断发展&#xff0c;燃气作为一种重要的能源供应方式&#xff0c;已经广泛地应用于居民生活和工业生产的各个领域。然而燃气泄漏和安全事故的风险也随之增加&#xff0c;对城市的安全和社会的稳定构成了潜在的威胁。我国燃气管道安全事故的频…

redhat9.3配置国内yum阿里源

由于新建的Redhat9.3在未注册激活之前是没有yum源的配置文件的&#xff0c;所以需要我们自己新建一个yum源文件的配置文件 vim /etc/yum.repos.d/aliyun_yum.repo 内容如下&#xff1a; [ali_baseos] nameali_baseos baseurlhttps://mirrors.aliyun.com/centos-stream/9-str…

基于Flutter的图片浏览器的实现

一 效果展示&#xff1a; 1. 图片展示&#xff1a; 2.混色&#xff0c;平铺&#xff0c;拉伸&#xff0c;原图展示 二 实验准备&#xff1a; 1.在包结构中创建images包来存放我们用到的图片&#xff0c;在pubspec.yaml中声明路径&#xff1a; 2. 检查虚拟机是否正常运行&…