[AcWing]792. 高精度减法(C++实现)模板题
1. 题目
2. 读题(需要重点注意的东西)
思路:模拟了人工计算减法的方法,我们在sub函数中始终保证是大数减小数。
步骤:
- 数据预处理:输入string a,b两个数,并将各个位的数倒置,并存放在vector A,B中;
- 比较两个数的大小 cmp()函数:
2.1 先比较位数,位数多的大;
2.2 若位数相同,从最高位开始逐一比较位的大小 ; - 执行减法操作sub(A,B),在此处要保证A>B:
3.1 首先定义借位t = 0;
3.2 模拟人工减法,t = A[i] - t - B[i];
3.3 (t+10)%10为结果;
3.4 如果 t < 0,则借位了,置t = 1,表示下一位需要减一;否则,t = 0。
3.5 此外,如果相减后C为100,输出时为001,与习惯不符,则需要pop出多余的0。 - 输出:当A<B时,执行的是sub(B,A),此时需要注意多输出一个’-’。
3. 解法
---------------------------------------------------解法---------------------------------------------------
#include<iostream>
#include<vector>
using namespace std;
// 比较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()-1;i >= 0;i --