題目傳送門
題解思路參考大佬
給定兩個正整數,計算它們的差,計算結果可能為負數。
輸入格式
共兩行,每行包含乙個整數。
輸出格式
共一行,包含所求的差。
資料範圍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...