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

洛谷 P2142:高精度减法 ← string+数组

【题目来源】
https://www.luogu.com.cn/problem/P2142
https://www.acwing.com/problem/content/794/

【题目描述】
高精度减法。输入不含前导 0

【输入格式】
两个整数 a,b(第二个可能比第一个大)。

【输出格式】
结果(是负数要输出负号)。​​​​​​​

【输入样例】
2
1

【输出样例】
1

【说明/提示】
20% 数据 a,b 在 long long 范围内;
100% 数据 0<a,b≤
10^10086

【算法分析】
(1)C++不支持大数运算,故而引入高精度算法。
(2)高精度算法将大数以字符串形式输入,然后拆分转换为一位一位的整数,之后按照小学的竖式运算方法进行计算。(注意:字符串中 0 下标从左开始,竖式运算中 0 下标从右开始,故代码中需要有一个逆序(reverse)操作。)
(3)对最高位做判断,然后输出便得结果。
代码 
while(c.size()>1 && c.back()=='0') c.pop_back(); 用于去除前导 0。因为两数相减后,左边若干位(即高位)有可能变为 0,故必须去除。
(4)在输入为 “321 159” 时,本高精度减法模拟执行过程如下所示:

input:
321 159procedure:
t=-8 c=2
t=-4 c=26
t=1 c=261output:
162

(5)据本题代码编写思路,此高精度减法函数 hiSub() 在进行计算时,永远是“大数 - 小数”。请按此理解代码。
(6)代码 
t<0?t=1:t=0; 反映了两数相应位相减后的“借位”情况。若两数第 i 位相减后的值 t 为负数,说明要借位,则在根据 t 计算出对应的 c+=((t+10)%10+'0'); 后,将 t 置为 1,为第 i-1 位的计算做准备。否则,将 t 置为 0。

【算法代码】

#include <bits/stdc++.h>
using namespace std;bool cmp(string a, string b) {if(a.size()!=b.size()) return a.size()>b.size();for(int i=0; i<a.size(); i++) {if(a[i]!=b[i]) return a[i]>b[i];}return true; //a=b
}string hiSub(string a,string b) {string c;int t=0;int i=a.size()-1, j=b.size()-1;while(i>=0 || j>=0) {if(i>=0) t=(a[i]-'0')-t;if(j>=0) t-=(b[j]-'0');c+=((t+10)%10+'0');t<0?t=1:t=0;i--, j--;}while(c.size()>1 && c.back()=='0') c.pop_back();reverse(c.begin(),c.end());return c;
}int main() {string a,b;cin>>a>>b;if(cmp(a,b)) cout<<hiSub(a,b)<<endl;else cout<<"-"<<hiSub(b,a)<<endl;return 0;
}/*
in:
23 123out:
-100
*/






【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/109126807
https://www.acwing.com/solution/content/5693/
https://www.cnblogs.com/ypzmlmf/p/17641301.html





 


 


http://www.mrgr.cn/news/81107.html

相关文章:

  • Java继承简介
  • 【CAPL实战】LIN调度表操作
  • 第二章:QT核心机制(一)
  • RK3588 Android平台部署DeepSeek-R1教程
  • [手机Linux] onepluse6T 系统重新分区
  • Redis Copilot:基于Redis为AI打造的副驾工具
  • 大语言模型驱动的Agent:定义、工作原理与应用
  • HTML5前端实现毛玻璃效果的可拖拽登录框
  • 大数据操作实验一
  • Unittest01|TestCase、断言、装饰器、夹具、清理函数、ddt
  • 计算机网络基础图解
  • 【Python】pandas库---数据分析
  • 人工智能ACA(四)--机器学习基础
  • 「Mac畅玩鸿蒙与硬件45」UI互动应用篇22 - 评分统计工具
  • SpringBoot提供的常用接口(拓展接口)示例
  • Flutter/Dart:使用日志模块Logger Easier
  • 【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
  • 「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
  • 电商项目-数据同步解决方案(一)
  • 「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件
  • 数据库原理学习——存储过程详解
  • AtCoder Beginner Contest 385(A~F)题解
  • 【微服务】SpringBoot 整合Redis实现延时任务处理使用详解
  • kafka理解记录
  • Java重要面试名词整理(二):SpringMyBatis
  • SMMU软件指南SMMU编程之虚拟机结构和缓存