A02 高精度减法
视频链接:A02 高精度算法 减法_哔哩哔哩_bilibili
#include <iostream> using namespace std; const int N=20000; int a[N],b[N],c[N]; int la,lb,lc; bool cmp(int a[],int b[]){ if(la!=lb) return la<lb; for(int i=la; i; i--) if(a[i]!=b[i]) return a[i]<b[i]; return false; //相等时,避免-0 } void sub(int a[],int b[],int c[]){ //a-b=c for(int i=1; i<=lc; i++){ if(a[i]<b[i]) a[i+1]--,a[i]+=10; c[i]=a[i]-b[i]; } while(c[lc]==0&&lc>1) lc--; //去0 } int main(){ string sa,sb; cin>>sa>>sb; la=sa.size(),lb=sb.size(),lc=max(la,lb); for(int i=1;i<=la;i++) a[i]=sa[la-i]-'0'; for(int i=1;i<=lb;i++) b[i]=sb[lb-i]-'0'; if(cmp(a,b)) swap(a,b),cout<<'-'; sub(a,b,c); for(int i=lc;i;i--) printf("%d",c[i]); return 0; }
#include <iostream> #include <vector> using namespace std; typedef vector<int> vi; vi a,b,c; bool cmp(vi &a, vi &b){ if(a.size()!=b.size()) return a.size()<b.size(); for(int i=a.size()-1; ~i; i--) if(a[i]!=b[i]) return a[i]<b[i]; return 0; } void sub(vi &a, vi &b, vi &c){ int t=0; for(int i=0; i<a.size(); i++){ t=a[i]; if(i<b.size()) t-=b[i]; if(t<0) a[i+1]--,t+=10; c.push_back(t); } while(c.size()>1&&!c.back())c.pop_back(); } int main(){ string sa,sb; cin>>sa>>sb; for(int i=sa.size()-1;~i;i--) a.push_back(sa[i]-'0'); for(int i=sb.size()-1;~i;i--) b.push_back(sb[i]-'0'); if(cmp(a, b)) swap(a,b),cout<<'-'; sub(a,b,c); for(int i=c.size()-1; ~i; i--) cout<<c[i]; }