当前位置: 首页 > news >正文

蓝桥杯备战(AcWing算法基础课)-高精度-减-高精度

目录

前言

1 题目描述

2 分析

2.1 第一步

2.2 第二步

3 代码


前言

详细的代码里面有自己的理解注释

1 题目描述

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

输入格式

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

输出格式

共一行,包含所求的差。

数据范围

1≤整数长度≤1e5 

输入样例:

32
13

输出样例:

19

2 分析

由前面对高精度-加-高精度的分析,我们输入先采用string存储,然后换成int数字,并且按照数组下标的低位存储数值低位存储数值。

2.1 第一步

利用for循环遍历两个string字符串,将其转换为对应的数字,即a[i]-'0',b[i]-'0',进行减法运算,我们确保A-B一定是A>=B,这样方便计算,如果B<A,我们只需要先输出-然后再计算B-A即可。

2.2 第二步

在for循环做减法时,当i<B.size()时,每位值为A[i]-B[i],否则为A[i]。我们用t保存每位值相减后的借位,第一次t=0,后面的每次当i++时,如果A[i]-B[i]<0,那么t=1,因为A[i]不够减需要向i+1借位。例如32-13,第一位t=A[i]-B[i]-t=2-3-0=-1,那么在个位需要保留的就是1,A的十位上,需要借位1,t=1,然后t=A[i]-B[i]-t=3-1-1=1,那么在十位需要保留的就是1,百位上,借位为0,也就是t=0,i++之后for循环结束,因为在做减法时,我们保证了A>B,那么A和B的最高位相减不会有借位,我们需要在for循环结束之后不用补上,但是在减法里面,我们需要注意前导0,比如16-16,按照计算之后,我们可以知道C里面存储的是00,我们只需要保存一个0即可

3 代码

#include<iostream>
#include<vector>using namespace std;
typedef long long LL;
const int N = 1e5 + 10;//A >= B
bool cmp(vector<int> &A,vector<int> &B) {if(A.size() != B.size()) return A.size()>B.size();for(int i = A.size(); i >= 0; i --) {if(A[i]!=B[i]) return A[i]>B[i];}return true;
}//C = A - B , A >= 0 B >= 0
vector<int> sub(vector<int> &A,vector<int> &B) {//保证A > B if(!cmp(A,B)) {cout<<"-";return sub(B,A);}vector<int> C;int t = 0;for(int i = 0; i < A.size(); i ++ ) {t = A[i] - t;if(i < B.size()){t = t - B[i];}if(t < 0){C.push_back((t + 10) % 10);t = 1;}else{C.push_back(t % 10);t = 0;}}//***记得去前导 0  while(C.size()>1&&C.back() == 0) {C.pop_back();}return C;
}
/*
834759941806152327900303151940196336060166992323381793006569112355455417182275047723716863558023198812556660965034876453196343663912966691993179332101329457072368130838432382442268056736351699000531533905891383548143212225860594411852986342939876618040011587608495448302207348447231253749252393529480791364963334998240618542705610316034216640260057315992222960153236561529337492196200456790971074681689375240113760172920200875086339547064832250693720175733336019433955946578365398845698054072342
1730212895609293780968781134422638013529337293953691202590416001015768176027398863777824489704339557737408048293638085241389042173942253145158882643543317299641617721453243716470035888718649999433851361288450883586077443742282144148770165505395776302856007672738840600408025145144269621804651639658798526865013172504028693729820255215825318827715895274406426858072321951569289515588456319694750151164168327105512059938690032122373175061408639335004407082357709386204929019847
*/
int main() {string a,b;cin>>a>>b;//a = "123456"vector<int> 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');}vector<int> C = sub(A,B);for(int i = C.size() - 1 ; i >= 0 ; i --) {cout<<C[i];}return 0;
}
http://www.lryc.cn/news/293572.html

相关文章:

  • AspNet web api 和mvc 过滤器差异
  • HarmonyOS应用/服务发布:打造多设备生态的关键一步
  • 【数据结构】双向带头循环链表实现及总结
  • 创建自己的Hexo博客
  • 音箱、功放播放HDMI音频解决方案之HDMI音频分离器HHA
  • 天猫数据分析:2023年坚果炒货市场年销额超71亿,混合坚果成多数消费者首选
  • YouTrack 用户登录提示 JIRA 错误
  • 题目 1163: 排队买票
  • 【lesson9】高并发内存池Page Cache层释放内存的实现
  • Java基础面试题-6day
  • 【Oracle 集群】RAC知识图文详细教程(三)--RAC工作原理和相关组件
  • 二级C语言笔试2
  • 如何计算两个指定日期相差几年几月几日
  • 再识C语言 DAY13 【递归函数(超详细)】
  • 【Linux】权限管理
  • 地理坐标系、空间坐标系、epsg查询网站
  • docker 容器指定主机网段
  • 零基础Vue框架上手;git,node,yarn安装
  • 十分钟学会用springboot制作微信小程序富文本编辑器
  • 【BBF系列协议】TR181-1 TR069的设备数据模型
  • Elasticsearch(简称ES)性能优化 实践
  • 《跨越阶层,小白选专业的逻辑:揭秘家庭背景与个人发展的秘密联系》
  • Python调用pyspark报错整理
  • 快递员的烦恼 - 华为OD统一考试
  • css1基础选择器
  • 【C语言】内联函数总结
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之MenuItemGroup组件
  • 【Linux多线程编程】互斥锁及其使用
  • RabbitMQ_00000
  • 【linux】docker下homeassistant和nodered安装及配置