【打卡d7】高精度加减乘除

vector<int>:存储 int 类型元素的动态数组。用于表示大整数的每一位数字。

vector 的大小是动态的,可以根据需要增加或减少元素的个数。

还有vector<double>vector<string> 等。

vector<int> v;
v.push_back(1);  // 添加1到末尾
v.push_back(2);  // 添加2到末尾
cout << v[0];  // 访问第一个元素,输出1
cout << v.size();  // 获取 vector 中的元素个数,输出2
v.pop_back();  // 删除末尾元素(2) 

大整数包含过多数字,大整数的大小可能超过了int、long long 的表示范围,将大整数的数字拆开按位存储在两个vector<int>A和B中,逆序存储,最低位在前。

加法

vector<int> add(vector<int> &A,vector<int> &B)
{if(A.size()<B.size()) return add(B,A);//判断AB的长度,大的是Avector<int> C;int t=0;for(int i=0;i<A.size();i++)
{    t=t+A[i];//加上A的i位上的数字(以及进位数字)if(i<B.size()) t+=B[i];//加上B的第i位数字C.push_back(t%10);//将个位数字放入Ct/=10;//t转变为十位的数字,就是进位
}if(t) C.push_back(t);//如果最后进位有数,放入return C;}
int main(){string a,b;vector<>int A,B;cin>>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(a[i]-'0');auto C =add(A,B);for(int i=C.size()-1;i>=0;i--) cout<<c[i];cout<<endl;return 0;
}

减法

1.cmp比较大小:

先比较A/B的长度,先不等长,若A.size() >B.size(),就是true。

再比较每一位数的大小,因为是逆序,倒着从最高位比较。i--。先判断两个数字不相等,A[i] != B[i],就返回 return A[i]>B[i];,是true。

如果没有找到不同的位(即两个数完全相等),返回 true

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;}//2.sub函数:模拟大整数减法vector<int> sub(vector<int> &A,vector<int> &B){vector<int> C;int t = 0;for(int t=0;i<A.size();i++){t = A[i]-t;if(i<B.size()) t=t-B[i];C.push_back((t+10)%10);//t大于0,(t+10)%10等于t//t小于0,(t+10)%10等于t+10if(t<0) t=1;else t=0; }while(C.size()>1&&C.back()==0) C.pop_back();// 删除前导0//C.back() == 0 检查最末尾元素(倒序的)是否为零。如果是零,说明这个零是多余的前导零,需要删除。return C;}//3.主函数int main(){string a,b;cin>>a>>b;vector <int> A,B,C;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--) cout<<C[i];}else{auto C=sub(B,A);cout<<"-";for(int i=C.size()-1;i>=0;i--) cout<<C[i];}return 0;}

乘法 

输入:a是大数,b是小数

vector<int> mul(vector<int> &A,int b){vector<int> C;int t = 0;//t表示进位for(int i=0;i<A.size()||t;i++){
//t不是0就一起循环if(i<A.size()) t=t+A[i]*b;C.push_back(t%10);//将个位数字加入c的末端t/=10;//整除10是进位,去掉个位的数字
}
}

除法

虽然是倒序输入,但是除法是从最高位开始算。

vector<int> div(vector<int> &A, int b, int &r)
{vector<int> C;  // 存储商的数组r = 0;  // 初始化余数为 0for (int i = A.size() - 1; i >= 0; i--)  // 从高位开始处理{r = r * 10 + A[i];  // 构建新的被除数C.push_back(r / b);  // 计算当前位的商,加入到结果数组 //(r小于b,结果是0)r %= b;  // 更新余数(除不尽的话,余数就是自己)}reverse(C.begin(), C.end());  // 结果是倒序的,反转过来while (C.size() > 1 && C.back() == 0) C.pop_back();  // 去除商中的前导零return C;  // 返回商
}
  • 初始化

    • r = 0;

    • C = [];

  • 第一次循环i = 9,当前位是 1):

    • r = r * 10 + A[9] = 0 * 10 + 1 = 1(新的被除数是 1

    • C.push_back(r / 123) = 1 / 123 = 0(商的当前位是 0

    • r = r % 123 = 1 % 123 = 1(余数更新为 1

  • 第二次循环i = 8,当前位是 2):

    • r = r * 10 + A[8] = 1 * 10 + 2 = 12(新的被除数是 12

    • C.push_back(r / 123) = 12 / 123 = 0(商的当前位是 0

    • r = r % 123 = 12 % 123 = 12(余数更新为 12

  • 第三次循环i = 7,当前位是 3):

    • r = r * 10 + A[7] = 12 * 10 + 3 = 123(新的被除数是 123

    • C.push_back(r / 123) = 123 / 123 = 1(商的当前位是 1

    • r = r % 123 = 123 % 123 = 0(余数更新为 0

  • 第四次循环i = 6,当前位是 4):

    • r = r * 10 + A[6] = 0 * 10 + 4 = 4(新的被除数是 4

    • C.push_back(r / 123) = 4 / 123 = 0(商的当前位是 0

    • r = r % 123 = 4 % 123 = 4(余数更新为 4

  • 继续循环

    • 后续的循环会按照相同的方式继续执行,直到处理完所有的位。

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

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

相关文章

windows清除电脑开机密码,可保留原本的系统和资料,不重装系统

前言 很久的一台电脑没有使用了&#xff0c;开机密码忘了&#xff0c;进不去系统 方法 1.将一个闲置u盘设置成pe盘&#xff08;注意&#xff0c;这个操作会清空原来u盘的数据&#xff0c;需要在配置前将重要数据转移走&#xff0c;数据无价&#xff0c;别因为配置这个丢了重…

频谱分析仪的最大保持功能

专门应用于例如遥控器之类的&#xff0c;按一下&#xff0c;一瞬间出现的信号的测量。 把仪器连接天线&#xff0c;观测空间中的一些信号&#xff0c;比如WIFI的信号&#xff0c;我们可以看到仪器接收到的信号其实是一直变化的&#xff0c;并不是每一次扫描都能扫到我们想要的这…

智能粉尘监测解决方案|守护工业安全,杜绝爆炸隐患

在厂房轰鸣的生产线上&#xff0c;一粒微小粉尘的聚集可能成为一场灾难的导火索。如何实现粉尘浓度的精准监控与快速响应&#xff1f;我们为您打造了一套"感知-预警-处置"全闭环的智能安全方案&#xff01; 行业痛点&#xff1a;粉尘管理的生死线 在金属加工、化工…

Excel处理控件Aspose.Cells指南:如何在不使用 Microsoft Excel 的情况下解锁 Excel 工作表

Microsoft Excel 允许用户使用密码保护工作表&#xff0c;以防止未经授权的更改。但是&#xff0c;在某些情况下&#xff0c;您可能需要在不使用 Microsoft Excel 的情况下解锁 Excel 工作表。在本指南中&#xff0c;我们将探讨解锁 Excel 工作表的不同方法&#xff0c;例如使用…

音乐webpack(通杀webpack-1)

本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未经许可…

【stm32--HAL库DMA+USART+空闲中断不定长收发数据】

串口通信-Hal库实现不定长度收发&#xff0c;DMAUSART DMA串口STM32CUBEMX配置&#xff08;工程创建&#xff09;基础配置时钟配置工程配置 代码编写现象 DMA 在正式配置之前&#xff0c;我们先来一起简单了解一下DMA。DMA&#xff08;Direct Memory Access&#xff0c;直接内…

爬虫的第三天——爬动态网页

一、基本概念 动态网页是指网页内容可以根据用户的操作或者预设条件而实时发生变化的网页。 特点&#xff1a; 用户交互&#xff1a;动态网页能够根据用户的请求而生成不同的内容。内容动态生成&#xff1a;数据来自数据库、API或用户输入。客户端动态渲染&#xff1a;浏览器…

【MATLAB例程】三维环境,基于TOA的动态轨迹定位,轨迹使用UKF(无迹卡尔曼滤波)进行滤波,模拟TOA/IMU的数据融合

本代码实现了一个基于到达时间&#xff08;TOA&#xff09;测距的三维定位系统&#xff0c;结合无迹卡尔曼滤波&#xff08;UKF&#xff09;对移动目标的轨迹进行优化。代码通过多锚节点&#xff08;>3&#xff09;的TOA测量数据&#xff0c;先进行初步定位解算&#xff0c;…

旋转变换原理

旋转变换原理 旋转是仿射变换的一种&#xff0c;通过变换矩阵实现图像绕指定中心旋转&#xff0c;保持直线和平行性不变。其数学表示为&#xff1a; 其中&#xff1a; ( c x , c y ) (c_x, c_y) (cx​,cy​) 是旋转中心。 θ \theta θ 是旋转角度&#xff08;逆时针为正&…

【计算机网络】DHCP工作原理

DHCP(动态主机配置协议) Dynamic Host Configuration Protocol 基于UDP协议传输 DHCP分配IP地址的过程 &#xff08;1&#xff09;DHCP DISCOVER客户机请求 IP 地址&#xff1a; 当一个 DHCP 客户机启动时&#xff0c;客户机还没有 IP 地址&#xff0c;所以客户机要通过 DHC…

应用于汽车车灯电路中的电感产品选型及质量管控标准

随着汽车的智能化与电动化发展&#xff0c;汽车车灯系统逐渐从单一照明功能向集成化、智能化和高能效方向演进。汽车车灯的性能关系着行车安全和驾驶体验&#xff0c;而车规级电感器作为车灯驱动电源电路中的核心元件&#xff0c;其性能直接决定了汽车车灯的效率、可靠性及环境…

MinGW下编译ffmpeg源码时生成compile_commands.json

在前面的博文MinGW下编译nginx源码中&#xff0c;有介绍到使用compiledb工具在MinGW环境中生成compile_commands.json&#xff0c;以为compiledb是捕获的make时的输出&#xff0c;而nginx生成时控制台是有输出编译时的命令行信息的&#xff0c;笔者之前编译过ffmpeg的源码&…

JDBC FetchSize不生效,批量变全量致OOM问题分析

背景 一个简单的基于 JDBC 采集数据库表的功能&#xff0c;当采集 Postgre SQL 某表&#xff0c;其数据量达到 500万左右的时候&#xff0c;程序一启动就将 JVM 堆内存「6G」干满了。 问题是程序中使用了游标的只前进配置&#xff0c;且设置了 fetchSize 属性&#xff1a; q…

OpenCV 图形API(或称G-API)

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 引言 OpenCV 图形API&#xff08;或称G-API&#xff09;是一个新的OpenCV模块&#xff0c;旨在使常规图像处理更快且更便携。通过引入一种新的基于图的执行…

注意!ChatGPT 全新 AI 图像功能延迟对免费用户开放

2025 年 3 月 25 日&#xff0c;OpenAI 正式宣布在 ChatGPT 中推出基于 GPT-4o 模型的全新原生图像生成功能。 这一功能允许用户通过对话生成和编辑图像&#xff0c;支持从写实风格到插图风格的多种形式。OpenAI 首席执行官萨姆・奥特曼&#xff08;Sam Altman&#xff09;在社…

方阵幂次(矩阵快速幂)

#include <bits/stdc.h> using namespace std;int n; vector<vector<int>> fuc(vector<vector<int>> a,vector<vector<int>> b){ // 矩阵乘法函数vector<vector<int>> f(n,vector<int>(n));for(int i0;i<n;i){…

MySQL-- 多表查询的分类,SQL92与SQL99,7种JOIN的实现,SQL99语法的新特性

目录 一&#xff0c;多表查询的分类 角度1&#xff1a;等值连接 vs 非等值连接 角度2&#xff1a;自连接 vs 非自连接 角度3&#xff1a;内连接 vs 外连接 二&#xff0c;SQL92语法实现内连接&#xff1a;见上&#xff0c;略SQL92语法实现外连接&#xff1a;使用 -…

IEEE PDF Xpress校验出现 :字体无法嵌入问题以及pdf版本问题

文章目录 问题描述一、字体嵌入问题首先查看一下&#xff0c;哪些字体没有被嵌入查看window的font文件夹里的字体下载字体的网站修复字体嵌入问题 二、pdf版本不对 问题描述 在处理IEEE的camera ready的时候&#xff0c;提交到IEEE express的文件没有办法通过validate&#xf…

产生式系统的完整示例——医疗诊断系统(附python代码)

产生式系统在现实社会中依然有很重要的应用价值&#xff0c;为了更好的理解它的构建、推理以及完整的实现过程&#xff0c;本文一医疗诊断系统为例&#xff0c;进行详细说明。以下是一个包含10条规则的医疗诊断产生式系统示例&#xff0c;包含完整的规则定义、推理流程图、Pyth…

【CSS3】02-选择器 + CSS特性 + 背景属性 + 显示模式

本文主要介绍&#xff1a;选择器、CSS属性、背景属性和显示模式的操作写法。 目录 1. 复合选择器 1.1 后代选择器 1.2 子代选择器 1.3 并集选择器 1.4 交集选择器 2. 伪类选择器 2.1 超链接&#xff08;拓展&#xff09; 3. CSS特性 3.1 继承性 3.2 层叠性 3.3 优先…