2、高精度减法
定义:以字符串的形式接收高精度数,将其转换为数字后逆序存储在数组中,从低位到高位模拟高精度减法运算。
题目: 高精度减法
题目描述
高精度减法,求 a−b 。a,b 都是不超过 240 位的非负整数。假设有前导零
输入
两个非负整数,每行一个。
输出
一个整数,代表两个整数相减之后的结果。
样例输入
33333333333333333333333333333333333333333
22222222222222222222222222222222222222222
样例输出
11111111111111111111111111111111111111111
标程1
#include<bits/stdc++.h>
usingnamespacestd;
constint N = 505;
string s1,s2;
int a[N],b[N],c[N];
//删除前导0
string del_0(string s){
//统计前导0的个数
int len = s.size();
int t = 0; // 统计前导0的个数
while(s[t] == '0' && t < len-1)t++;
//删除
s.erase(0,t);
return s;
}
//主程序
int main(){
cin >> s1 >> s2;
//删除前导0
s1 = del_0(s1);
s2 = del_0(s2);
int la = s1.size();
int lb = s2.size();
//处理正负
if(la < lb || la == lb && s1 < s2){
swap(la,lb);
swap(s1,s2);
cout << "-";
}
//逆向存储
for(int i = 1; i <= la; i++) a[i] = s1[la-i] - '0';
for(int i = 1; i <= lb; i++) b[i] = s2[lb-i] - '0';
//相减
for(int i = 1; i <= la; i++){
c[i] = a[i] - b[i];
if(c[i] < 0){
a[i+1] -= 1;
c[i] += 10;
}
}
//删除前导0
while(c[la] == 0 && la > 1) la--;
//逆向输出
for(int i = la; i >= 1; i--) cout << c[i];
return0;
}
领取专属 10元无门槛券
私享最新 技术干货