C++高精度算法之高精度減法


高精度減法

題目描述

高精度減法

輸入

兩個整數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;
}

感想總結

面對高精度類型的題我們只需要像豎式一樣從低位到高位計算,最后進行處理。



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com