C 高精度減法及模板

2022-05-26 18:42:10 字數 1488 閱讀 8230

在資料範圍超過long long 的範圍時,就要考慮到高精度,對於高精度減法而言,本文介紹的兩個數均 >= 0, 高精度減法的實質是用**去模擬我們的減法運算,包括借位…正負號種種問題,這裡用vector 來模擬兩個大數相減,先貼**:

#pragma gcc optimize(2)

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define pm make_pair

using

namespace std;

typedef

long

long ll;

typedef pair<

int,

int> pii;

const

int n =

1e4+50;

const

int mod =

1e9+7;

const

int inf =

0x3f3f3f3f

;const

double eps =

1e-8

;vector<

int> a, b;

bool

cmp(vector<

int>

&a, vector<

int>

&b)vector<

int>

sub(vector<

int>

&a, vector<

int>

&b)while

(!c.

back()

&& c.

size()

>

1) c.

pop_back()

;return c;

}int

main()

else

return0;

}

模擬過程和高精度加法是類似的,具體可以移步c++ 高精度加法,這裡不再具體介紹,首先,如果a >= b 則直接a - b 即可,如果a < b ,實質上就是- (b - a), 所以要視情況判斷是否帶符號和交換。在模擬借位時,實際上就是在下一位多減乙個1,在當前位 + 10,用 t 來描述借位。假設該位兩個數為a[i], b[i] 如果a[i] - b[i] >= 0, 則 t 此時應該 = 0,因為不用借位。反之,t 應該等於 1,在下一位時應該把這個 1 減掉,>=0 時,當前位的答案就是 t ,當 < 0 時,當前的答案是 a[i] - b[i] + 10,我們可以用乙個表示式涵蓋這兩種情況:t = (t + 10) % 10,可以思考一下為什麼這樣寫,很好理解。

C 高精度減法及模板

在資料範圍超過long long 的範圍時,就要考慮到高精度,對於高精度減法而言,本文介紹的兩個數均 0,高精度減法的實質是用 去模擬我們的減法運算,包括借位 正負號種種問題,這裡用vector 來模擬兩個大數相減,先貼 pragma gcc optimize 2 include include i...

C 高精度減法模板

高精度減法要注意的是被減數必須必減數大,同時需要處理借位。方法類似於高精度加法。include include include include include include define n 1001 using namespace std int main for i 0 i lena i a ...

模板 C 高精度減法

高精度減法和高精度加法同理,都是模擬人在紙上進行的運算。但與高精度加法不同的是,高精度減法在運算前要保證大的數減去小的數,如果輸入的被減數小於減數,則需調換被減數與減數字置並在結果前新增負號。當進行到某一位運算需要借位時,直接將更高一位的數字減一,並用10減去減數的這一位,再加上被減數。如下 inc...