C++基础算法高精度篇

📟作者主页:慢热的陕西人

🌴专栏链接:C++算法

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言

主要讲解了高精度算法的四种常用的计算

在这里插入图片描述

文章目录

    • Ⅲ. 高精度
      • Ⅲ. Ⅰ . A + B:
      • Ⅲ. Ⅱ . A - B:
      • Ⅲ. Ⅲ. A * b:
      • Ⅲ. Ⅲ. A / b:

Ⅲ. 高精度

以下数字均指位数

①A + B(精度均在10^6)

②A - B (精度均在10^6)

③A * b (len(A) <= 10^6, a <= 1000);

④A / b (len(A) <= 10^6, a <= 1000);

Ⅲ. Ⅰ . A + B:

思路:将两个大数先用字符串保存,然后再倒序存入到数组中(这是因为我们在运算的时候会产生进位)。然后再实现一个add函数实现加法,将运算的结果存储到一个数组中:

代码:

#include <iostream>
#include <vector>using namespace std;vector<int> add(vector<int>& A, vector<int>& B)
{vector<int> C;int t = 0;for (int i = 0; i < A.size() || i < B.size(); i++){if (i < A.size()) t += A[i];if (i < B.size()) t += B[i];C.push_back(t % 10);t /= 10;}if (t) C.push_back(1);return C;
}int main()
{string a, b;vector<int> A, B;cin >> a >> b; //将A和B存储在a和b的字符串中for (int i = a.size() - 1; i >= 0; --i) A.push_back(a[i] - '0');for (int i = b.size() - 1; i >= 0; --i) B.push_back(b[i] - '0');auto C = add(A, B);for (int i = C.size() - 1; i >= 0; --i) printf("%d", C[i]);return 0;
}

Ⅲ. Ⅱ . A - B:

思路:存储思路都是统一的,需要一个借位t.

每一位的计算:x = Ai - Bi - t,如果x大于零那么本位减法的结果就是x,如果x小于零那么需要在x结果的基础上加上10

总结果的计算:如果A >= B那么结果就是A - B,如果A < b那么结果就是-(B - A)

在计算之前我们要保证每次都是大数减小数,所以要先实现一个cmp函数来比较哪一个数字大。

代码:

#include <iostream>
#include <vector>using namespace std;
bool cmp(vector<int>& A, vector<int>& B)
{//位数不同if (A.size() != B.size()) return A.size() > B.size();//位数相同for (int i = A.size() - 1; i >= 0; --i)if (A[i] != B[i]) return A[i] > B[i];return true;
}vector<int> sub(vector<int>& A, vector<int>& B)
{vector <int> C;for (int i = 0, t = 0; i < A.size(); ++i){//将借位除去t = A[i] - t;//计算本位if (i < B.size()) t -= B[i];C.push_back((t + 10) % 10);if (t < 0) t = 1;elset = 0;}//去除前导零while (C.size() > 1 && C.back() == 0) C.pop_back();return C;
}int main()
{string a, b;vector<int> A, B;cin >> a >> b; //将A和B存储在a和b的字符串中for (int i = a.size() - 1; i >= 0; --i) A.push_back(a[i] - '0');for (int i = b.size() - 1; i >= 0; --i) B.push_back(b[i] - '0');if (cmp(A, B)){auto C = sub(A, B);for (int i = C.size() - 1; i >= 0; --i) printf("%d", C[i]);}else{auto C = sub(B, A);printf("-");for (int i = C.size() - 1; i >= 0; --i) printf("%d", C[i]);}return 0;
}

Ⅲ. Ⅲ. A * b:

思路:存储数据的思路不变,特别的点在于对进位和本位计算的处理。

例如:我们要计算123 * 12。

首先我们将3 * 12 + t 存到t里面,那么本位就是t % 10 = 6 , 而进位就是t / 10 = 3 ;

以此类推将2 * 12 + t 存到t里面,那么本位就是t % 10 = 7,而进位就是t / 10 = 2;

最后我们将1 * 12 + t 存到t里面,那么本位就是t % 10 = 4, 而进位就是t / 10 = 1

最后如果t不为零的话,那么最高位的值就是继续将t进行分解。

代码:

#include <iostream>
#include <vector>using namespace std;vector<int> mul(vector<int>& A,int b)
{vector <int> C;for (int i = 0, t = 0; t || i < A.size(); ++i){if (i < A.size()) t += A[i] * b;C.push_back(t % 10);t /= 10;}return C;
}int main()
{string a;int b;vector<int> A;cin >> a >> b; //将A和B存储在a和b的字符串中for (int i = a.size() - 1; i >= 0; --i) A.push_back(a[i] - '0');auto C = mul(A, b);for (int i = C.size() - 1; i >= 0; --i) printf("%d", C[i]);return 0;
}

Ⅲ. Ⅲ. A / b:

思路:A / B 的话我们是从高位开始计算的,而且计算机每次只能计算一位。

那么我们每次计算都将余数存储在r中,然后每次都将r * 10,最后再加上除数的本位,然后再次计算余数,直到除数计算完成。

代码:

#include <iostream>
#include <vector>using namespace std;//A 是除数, b是被除数,r是余数
vector<int> div(vector<int>& A,int b, int &r)
{vector <int> C;r = 0;for (int i = A.size() - 1; i >= 0; --i){r = r * 10 + A[i];C.push_back(r / b);r %= b;}//反转为标准的存储格式reverse(C.begin(),C.end());//去掉前导零while (C.size() > 1 && C.back() == 0) C.pop_back();return C;
}int main()
{string a;int b;int r = 0;vector<int> A;cin >> a >> b; //将A和B存储在a和b的字符串中for (int i = a.size() - 1; i >= 0; --i) A.push_back(a[i] - '0');auto C = div(A, b, r);for (int i = C.size() - 1; i >= 0; --i) printf("%d", C[i]);cout << endl << r;return 0;
}

到这本篇博客的内容就到此结束了。
如果觉得本篇博客内容对你有所帮助的话,可以点赞,收藏,顺便关注一下!
如果文章内容有错误,欢迎在评论区指正

在这里插入图片描述

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

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

相关文章

【外卖系统】环境的搭建

搭建数据库 1.创建数据库&#xff0c;名字叫reiggie 2.导入数据库 创建Maven项目 1.创建项目 2.检查项目新建的是否有问题 3.导入pom.xml文件 4.导入application.yml文件 在从gittee上down的代码的基础上&#xff0c;修改一下端口号&#xff0c;数据库的名称什么的 …

传输层协议—网络

文章目录 1.TCP1.1TCP协议段格式1.2可靠机制1.2.1确认应答机制1.2.2超时重传机制1.2.3连接管理机制1.2.4流量控制机制1.2.5拥塞控制机制 1.3效率机制1.3.1滑动窗口机制1.3.2延迟应答机制1.3.3捎带应答机制 1.4粘包问题&#xff08;tcp问题&#xff0c;应用层的数据包&#xff0…

【uni-app】常用图标、头像汇总

在做小程序的时候&#xff0c;有时候需要各种图标和头像素材&#xff0c;而百度一堆基本都是收费的。所以&#xff0c;整理一些免费好用的图标&#xff0c;头像库&#xff1a; 1、iconfont-阿里巴巴矢量图标库 基本上常用的矢量图标&#xff0c;在这儿都有&#xff0c;而且可…

rt-thread rtc设备驱动开发

基于pico rtc设备驱动开发 I/O设备框架RTC设备功能配置——启用Soft RTC功能配置——启用NTP时间自动同步功能配置——启用硬件RTC RT-Thread 的 RTC &#xff08;实时时钟&#xff09;设备为操作系统的时间系统提供了基础服务。应用层对于 RTC 设备一般不存在直接调用的 API &…

基于ZYNQ阵列涡流检测系统硬件设计(一)

为实现阵列涡流检测系统总体功能&#xff0c;需研制一套多通道信号采集硬件系统&#xff0c;以搭配 软件编程实现分时激励和分时采集。基于以上要求&#xff0c;本章介绍了阵列涡流检测系统的硬 件模块设计。 3.1 阵列涡流检测系统总体设计 阵列涡流检测系统需要利用 DA …

分布式软件架构——传输链路

传输链路 链路指无源的点到点的物理连接。链路是计算机网络中的一个重要概念&#xff0c;它指的是连接两个网络设备的物理或逻辑路径。简单来说&#xff0c;链路就是电信号或数据在网络中传输的路径。在计算机网络中&#xff0c;链路可以分为物理链路和逻辑链路两种。物理链路…

【UI自动化测试】appium+python+unittest+HTMLRunner

进阶Python接口自动化测试必备教程&#xff08;2023全网最详细&#xff09; 简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下载与安装 下载需要自…

举例说明基于线性回归的单层神经网络网络(以梯度下降算法来求解权重的过程)...

我们将通过一个简单的例子来说明基于线性回归的单层神经网络&#xff0c;以及如何使用梯度下降算法来求解权重。 假设我们有以下数据集&#xff0c;表示学生的学习时间&#xff08;小时&#xff09;与他们的考试分数&#xff1a; 学习时间&#xff08;X&#xff09;&#xff1a…

线程池学习(五)线程工厂、线程池工厂

Executors 定义的Executor, ExecutorService, ScheduledExecutorService, ThreadFactory和Callable类的工厂和实用程序方法&#xff0c;我们称为线程池工厂。ThreadFactory 为定制化创建新线程的对象,我们称为线程工厂 前面几期的学习中&#xff0c;我已经初步会使用线程池了&…

MySQL内置函数

内置函数从实现的功能角度可以分为数值函数、字符串函数、日期和时间函数、流程控制函数、加密与解密函数&#xff0c;获取MySQL信息函数、聚合函数等。 1.数值函数 来源&#xff1a; 版权声明&#xff1a;本文为CSDN博主「清风拂来水波不兴」的原创文章&#xff0c;遵循CC 4…

Ceph简介及部署

Ceph Ceph一、存储基础1、单机存储设备2、Ceph 简介3、Ceph 优势5、Ceph 架构6、Ceph 核心组件7、OSD 存储后端8、Ceph 数据的存储过程9、Ceph 版本发行生命周期10、Ceph 集群部署 二、部署ceph-deploy Ceph 集群前环境配置1、关闭 selinux 与防火墙2、根据规划设置主机名3、配…

数据中心水浸事件,该如何找回安全?

数据中心是现代企业和组织中不可或缺的基础设施&#xff0c;承载着大量的敏感数据和关键业务运作。然而&#xff0c;水浸事件可能成为数据中心的巨大威胁&#xff0c;可能导致设备故障、数据丢失以及业务中断&#xff0c;给组织带来严重的损失和风险。 因此&#xff0c;为了保护…

gd32f103vbt6 串口OTA升级3-linux端的部分

一. 简介 本文主要是对linux端升级单片机程序的功能部分做一些介绍&#xff0c;包括一些软件流程。 二.硬件部分 2.1 rk3399cpugd32f103 2.2 连接方式&#xff1a;串口&#xff08;115200&#xff0c;8N1&#xff09;或者iic&#xff08;本文没有介绍iic&#xff09; 三、其…

WebRTC不同方案对比

1.功能上会有一些出入&#xff0c;尤其是国内的metaRTC版本迭代很快&#xff0c; 2.后续的ffmpeg也在进行支持webrtc特性&#xff0c;obs新的版本好像已经支持了webrtc&#xff0c; 3.对于webrtc部分缺少的信令部分的标准化也有了对应的标准whip和whep协议 所以&#xff0c;如…

一道SQL题

有个搞数仓的朋友不知道从哪儿弄了个题。。。 做了做体验了一下。。。 记录记录。 分析 要保证每天都要做新题 5天必须都做题&#xff0c;不然GG 最后一天必须做新题&#xff0c;如果最后一天做新题了&#xff0c;前面那几天没做新题&#xff0c;做的是老题 最后一天&#…

QT:问题、解决与原因

在这里记录一些自己遇到的在QT开发上面的小问题和tips 目录 QComboBox 设置qss样式不生效qt按钮设置点击释放效果实现效果 QComboBox 设置qss样式不生效 我设置的样式是&#xff1a; box->setStyleSheet("QComboBox {""border: none;""padding:…

支付宝支付上线准备工作(商家自研接入)

商家自研流程 1.创建应用 登录支付宝开放平台创建 网页/移动应用 说明&#xff1a;生成的应用唯一标识 APPID 可用于调用开放产品接口。 2.配置应用 2.1 应用详情 2.2 产品绑定 2.3 开发设置 在开发 > 开发设置 中配置应用信息。 2.3.1 接口加密方式 按操作步骤进行…

抖音seo源码部署/开源不加密可二开/抖音seo优化开发方案

一、前言 抖音是目前国内非常流行的短视频平台之一&#xff0c;用户数量庞大&#xff0c;更是吸引了许多企业和个人在上面开设账号&#xff0c;通过发布内容来进行流量变现。但是&#xff0c;在一个账号发布内容的同时&#xff0c;管理员又需要同时关注多个账号&#xff0c;对账…

mysql中的行格式之compact格式分析

mysql中的行格式之compact格式分析 mysql行格式 所谓行格式&#xff0c;就是指mysql一行数据的存储格式。 InnoDB 储存引擎支持有四种行储存格式&#xff1a;Compact、Redundant、Dynamic 和 Compressed。 Redundant是很古老的行格式了&#xff0c;因为占用空间最多&#x…

基于深度学习的高精度道路瑕疵检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度道路瑕疵&#xff08;裂纹&#xff08;Crack&#xff09;、检查井&#xff08;Manhole&#xff09;、网&#xff08;Net&#xff09;、裂纹块&#xff08;Patch-Crack&#xff09;、网块&#xff08;Patch-Net&#xff09;、坑洼块&#x…