C++高精度演算法之高精度減法
阿新 • • 發佈:2019-01-02
高精度減法
題目描述
高精度減法
輸入
兩個整數a,b(第二個可能比第一個大)
輸出
結果(是負數要輸出負號)
樣例輸入
2 1
樣例輸出
1
說明
20%資料a,b在long long範圍內
100%資料0<a,b<=10^10000
題目解析
樣例解析:
2
-1
1
實現程式碼
程式碼如下:
#include<iostream> #include<string> using namespace std; int main() { string sd,se,sa; int a[100001]{0},b[100001]{0},c[100001]{0},mc,me,mz,n,mo=0; cin>>sd>>se; mc=sd.size(); me=se.size(); if(mc<me||mc==me&&sd<se){sa=sd;sd=se;se=sa;n=mc;mc=me;me=n;mo=-1;} for(int i=1;i<=mc;i++) a[i]=sd[mc-i]-'0'; for(int i=1;i<=me;i++) b[i]=se[me-i]-'0'; int i=1,o=0; while(i<=mc||i<=me) { if(a[i]<b[i]){a[i+1]--;a[i]+=10;} c[i]=a[i]-b[i]; i++; } mz=i;while(c[mz]==0&&mz>1)mz--; if(mo==-1) cout<<"-"; for(int i=mz;i>=1;i--) cout<<c[i]; return 0; }
感想總結
面對高精度型別的題我們只需要像豎式一樣從低位到高位計算,最後進行處理。