792 高精度減法(模板題)

2021-10-04 17:58:28 字數 1617 閱讀 7296

題目傳送門

題解思路參考大佬

給定兩個正整數,計算它們的差,計算結果可能為負數。

輸入格式

共兩行,每行包含乙個整數。

輸出格式

共一行,包含所求的差。

資料範圍1≤整

數長度≤

10

51≤整數長度≤10^5

1≤整數長度

≤105

輸入輸出樣例

樣例輸入1

32

11

樣例輸出1

21
高精度減法。模板題。

將高精度整數的每一位存到陣列內,方便進行按位計算。我們設定三個陣列a, b, c,用於存放高精度數,其中,我們用c儲存結果的高精度數。

減法運算的結果可正可負,如果是正數直接輸出,如果是負數用大數減小數後加負號。因此我們要額外對所求的數是正數還是負數進行判斷:

bool

cmp(vector<

int> a, vector<

int> b)

依據算術減法的邏輯,按位相減再減被低一位借去的位數。若同一位上的兩數相減,就需要再減去被低一位借去的位數。我們設定變數t,用來儲存每次按位運算時前一位借去的位數情況,借位就是1,沒借就是0。利用for迴圈進行按位減法運算,a[i]-b[i]-t表示借位後的按位相減,其中 i < b.size()。將相減後的數加10後模10存入c中,如果夠減加10後模10的結果和原來的值一樣;如果不夠減,表示的是向高位借位後相減的結果。

for

(int i =

0, t =

0; i < a.

size()

; i++

)

去除前導零。

while

(c.size()

>1&&

!c.back()

) c.

pop_back()

;

#include

#include

using

namespace std;

bool

cmp(vector<

int> a, vector<

int> b)

vector<

int>

sub(vector<

int> a, vector<

int> b)

while

(c.size()

>1&&

!c.back()

) c.

pop_back()

;return c;

}int

main()

else

return0;

}

Acwing 792 高精度減法 模板

給定兩個正整數,計算它們的差,計算結果可能為負數。輸入格式 共兩行,每行包含乙個整數。輸出格式 共一行,包含所求的差。資料範圍 1 整數長度 105 輸入樣例 3211 輸出樣例 21 include include using namespace std vector int a,b,c stri...

演算法練習 792 高精度減法

792.高精度減法 給定兩個正整數,計算它們的差。輸入格式 共兩行,每行包含乙個整數。輸出格式 共一行,包含所求的和。資料範圍 1 整 數長度 1000000 1 le整數長度 le 1000000 1 整數長度 100 0000 輸入樣例 輸出樣例 include using namespace ...

acwing 792 高精度減法

給定兩個正整數,計算它們的差,計算結果可能為負數。輸入格式 共兩行,每行包含乙個整數。輸出格式 共一行,包含所求的差。資料範圍 1 整數長度 105 10 5 105輸入樣例 3211 輸出樣例 21 include include include using namespace std vecto...