@Yezi.press
高精度减法
两个高精度数相减的普通实现(包括小减大)
课堂示例发布于 2026/09/12#高精度
C++42 行1057 Bytes
#include<bits/stdc++.h>
using namespace std;
int main(){
string a, b;
cin >> a >> b;
// 判断a和b的大小,如果a小的话就先输出一个负号,交换a,b
if (a.size() < b.size() || (a.size() == b.size() && a < b)) {
cout << '-';
swap(a, b);
}
//翻转对齐
int a_len = a.size(),b_len = b.size();
int a_digit[305] = {0},b_digit[305] = {0};
for(int i=0,j=a_len-1;i<a_len;i++,j--)
a_digit[j] = a[i]-'0';
for(int i=0,j=b_len-1;i<b_len;i++,j--)
b_digit[j] = b[i]-'0';
//按位减
int c_len = max(a_len,b_len);
int c_digit[305] = {};
for(int i=0;i<c_len;i++){
c_digit[i] = a_digit[i] - b_digit[i];
}
//借位
for(int i=0;i<c_len;i++){
if (c_digit[i] < 0) {
c_digit[i] += 10;
c_digit[i+1]--;
}
}
// 去除前导 0
while (c_digit[c_len-1] == 0 && c_len > 1) c_len--;
//逆序输出,从高位开始输出
for(int i=c_len-1;i>=0;i--) cout<<c_digit[i];
return 0;
}