高精度减法(注释版)
2025-11-02 17:49:57
发布于:江苏
#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
int c[N];
int main(){
// ------ 准备工作 --------
string a,b;
cin>>a>>b;
bool flag=false; // 标记是否为负数
if(a.size()<b.size() || (a.size()==b.size() && a<b)){
swap(a,b);
flag=true;
}
// 下标与位数对齐
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
while(b.size()<a.size()) b.push_back('0');
// --------- 模拟减法过程 -----------
int t=0; // 进位
int len=0; // 位数
for(int i=0;i<a.size();i++){
int sub=b[i]-'0'+t;
int x=a[i]-'0';
if(x<sub){ // 不够减
x+=10;
t=1; // 下一位有进位
}
else t=0; // 下一位无进位
x-=sub;
c[++len]=x;
}
// ---------- 输出结果 -----------
if(flag) cout<<'-';
while(len>1 && c[len]==0) len--; // 去掉高位多余的0
for(int i=len;i>=1;i--) cout<<c[i];
return 0;
}
这里空空如也







有帮助,赞一个