高精度减法【模板】
2023-08-15 17:12:10
发布于:浙江
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <cmath>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e5+5;
string s1,s2;
int a[N];
int b[N];
int c[N];
int lena,lenb,len;
int main(){
//第一步 输入字符串
cin >> s1 >> s2;
lena = s1.length();
lenb = s2.length();
len = max(lena,lenb);
//判断调换位置
if(lenb > lena || (lena == lenb && s2 > s1)){
swap(s1,s2);
swap(lena,lenb);
cout << "-";
}
//第二步 反转字符串,并将字符转化数字
for(int i=0;i<lena;i++){
a[i] = s1[lena - 1 - i] - '0';
}
for(int i=0;i<lenb;i++){
b[i] = s2[lenb - 1 - i] - '0';
}
//第三步 相减
for(int i=0;i<len;i++){
c[i] += a[i] - b[i];
if(c[i] < 0){
c[i]+=10;
c[i+1]--;
}
}
//第四步 退位判断
while(len > 1 && c[len-1] == 0) len--;
//第五步 倒序输出
for(int i=len-1;i>=0;i--){
cout << c[i];
}
return 0;
}
//高精度减法
//1.输入字符串
//2.判断是否需要调换位置(a,b)
//3.反转字符串,并将字符转化数字
//4.相减
//5.前导零
//6.倒序输出
这里空空如也
有帮助,赞一个