1. 程式人生 > >C++高精度演算法之高精度減法

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;
}

感想總結

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