高精度(1)——高精度减法

embedded/2024/10/21 5:58:15/

题目描述

给定两个正整数(不含前导 0),计算它们的差,计算结果可能为负数。

输入格式

共两行,每行包含一个整数。

输出格式

共一行,包含所求的差。

数据范围

1≤整数长度≤100000

输入样例

32
11

输出样例

21

注释版代码

#include<iostream>
#include<vector>
using namespace std;
//判断A>=B是否
bool cmp(vector<int> &A,vector<int> &B)
{if(A.size()!=B.size())//如果A和B的长度不一致return A.size()>B.size();//那么我们直接返回A的长度>B的长度即A大于Bfor(int i=A.size()-1;i>=0;i--)//如果一致,那么我们从高位往后比较,只要相同位大小比较成功即可判断{if(A[i]!=B[i])//如果A某位数字和B的该位数字不一致{return A[i]>B[i];//返回A[i]>B[i],即A>B}}return true;//如果都不满足以上条件说明两个数是相等的,也返回true
}
vector<int> sub(vector<int> &A,vector<int> &B)
//加&是因为:避免复制:传递大型vector时,复制整个vector是非常耗时和占用内存的,通过引用传递则避免了这一问题。
//提高效率:引用传递速度更快,因为它仅仅是传递了一个指向原始数据的指针,而不是复制整个数据结构。
{vector<int> C;int t=0;//t表示借位,如果相减是后面那位有借位,前面相减的时候我们就得把借位给它减下去for(int i=0;i<A.size();i++)//因为我们已经确保A一定大于B,所以用A的长度更保险{int m=A[i]-t;//设m为减完之后的数字,所以相减时都要减去被借的if(i<B.size()) m=m-B[i];//如果B还有长度,就把B减下去,如果没有B了,那就不用减了C.push_back((m+10)%10);//最后把(m+10)%10放进C容器里准备输出,(m+10)%10是一个通用式,分解后如下://m>=0,说明相减不用借位,C.push_back(m)//m<0,说明不够减的,需要借位,C.push_back(m+10)if(m<0) t=1;//不够减的,就借1位else t=0;//不然就不用借}while(C.size()>1&&C.back()==0)//如果长度>1,比如003,并且最后放进去的是0(保证长度其实是为了保证结果为0的存在){C.pop_back();//我们就把这两个0都去掉,直到长度不大于1,并且前面没有0了}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');//装进vector<int>容器里面,方便进行比较位数,并且vector容器的长度可以控制}for(int i=b.size()-1;i>=0;i--){B.push_back(b[i]-'0');}if(cmp(A,B))//cmp函数是验证是否A>=B,返回true和false{auto C=sub(A,B);//如果A>=B,则用A-Bfor(int i=C.size()-1;i>=0;i--)printf("%d",C[i]);}else{auto C=sub(B,A);//如果A(not)>=B,则用B-A,既然都是用大的减去小的,所以sub函数只需要考虑大的减去小的即可printf("-");for(int i=C.size()-1;i>=0;i--)printf("%d",C[i]);}return 0;
}

http://www.ppmy.cn/embedded/119959.html

相关文章

周成虎院士团队和朴世龙院士合作发表Nature Communications:中国植树造林的固碳潜力评估

本文首发于“生态学者”微信公众号&#xff01; 编者荐语&#xff1a;以下论文是中国科学院地理科学与资源研究所周成虎院士研究团队和朴世龙院士近期合作发表的研究&#xff0c;研究发现在中国强烈的人地矛盾和耕林博弈背景下&#xff0c;相较于新增林地&#xff0c;加密现有…

Windows 命令

在 Windows 系统中&#xff0c;你可以使用命令行工具来执行各种任务&#xff0c;比如文件管理、网络诊断、系统维护等。下面是一些常用的 Windows 命令及其用途。 文件管理命令 dir&#xff1a;列出当前目录下的文件和子目录。 dircd&#xff1a;改变当前目录。 cd pathmd 或 …

数据结构2——单链表

在数据结构1——顺序表&#xff08;C语言版&#xff09;中&#xff0c;我们已经了解了顺序表的使用和实现&#xff0c;总结一下顺序表的优点&#xff1a; ①尾插尾删效率足够快&#xff1b; ②下标的随机访问和修改也足够方便。 可除此之外顺序表也确实存在着不足&#xff1a; …

Gson将对象转换为JSON(学习笔记)

JSON有两种表示结构&#xff0c;对象和数组。对象结构以"{"大括号开始&#xff0c;以"}"大括号结束。中间部分由0或多个以”&#xff0c;"分隔的”key(关键字)/value(值)"对构成&#xff0c;关键字和值之间以":"分隔&#xff0c;语法结…

如何在Excel中快速找出前 N 名,后 N 名

有如下销售额统计表&#xff1a; 找出销售额排前 10 名的产品及其销售额&#xff0c;和销售额排倒数 10 名以内的产品及其销售额&#xff0c;结果如下所示&#xff1a; 前 10 名&#xff1a; spl("E(?1).sort(ProductSales:-1).to(10)",A1:C78)后 10 名&#xff1…

OJ题之单链表排序

描述 给定一个节点数为n的无序单链表&#xff0c;对其按升序排序。 数据范围&#xff1a;0<n≤1000000<n≤100000&#xff0c;保证节点权值在[−109,109][−109,109]之内。 要求&#xff1a;空间复杂度 O(n)&#xff0c;时间复杂度 O(nlogn) 给出以下三种方式&#x…

基于二自由度汽车模型的汽车质心侧偏角估计

一、质心侧偏角介绍 在车辆坐标系中&#xff0c;质心侧偏角通常定义为质心速度方向与车辆前进方向的夹角。如下图所示&#xff0c;u为车辆前进方向&#xff0c;v为质心速度方向&#xff0c;u和v之间的夹角便是质心侧偏角。 质心侧偏角的作用有如下三点&#xff1a; 1、稳定性…

推荐一款开源的链路监控系统

12.9k star&#xff0c;最强链路监控系统推荐&#xff0c;推荐 用过cat、pinpoint、skywalking等链路监控系统&#xff0c;各有优劣&#xff0c;但用的最多的还是pinpoint&#xff0c;工作6年&#xff0c;其中有4年都在用pinpoint&#xff0c;所以也比较熟悉&#xff0c;之前也…