AcWing 高精度 模板

2021-10-04 22:16:07 字數 2074 閱讀 4047

大整數的儲存

將大整數的每一位存到陣列中

陣列下標小的存低位 (高位的進製在最後)

模擬人工加法的過程

最後補上進製

#include

#include

using

namespace std;

const

int n =

1e6+10;

// c = a + b

// 倒著表示的

vector<

int>

add(vector<

int>

&a, vector<

int>

&b)if

(t) c.

push_back

(t);

return c;

}int

main()

減法

不夠減的話就向前一位借位

t 表示借位

分為兩種情況

a_i - b_i -t >=0 a_i-b_i -t (不需要借位)

<0 a_i-b_i+10-t (需要借位)

假定a >= b如果小於的話先用大的減去小的再加上乙個負號

一定不會出現負數的情況,有借位t =1,否則 t = 0

#include

#include

using

namespace std;

// 判斷是否有 a >= b

bool

cmp(vector<

int>

&a, vector<

int>

&b)// c = a - b a >= b

// 倒著表示的

vector<

int>

sub(vector<

int>

&a, vector<

int>

&b)// 去除前導0

while

(c.size()

>

1&& c.

back()

==0) c.

pop_back()

;// 數為0情況,至少為

return c;

}int

main()

else

return0;

}

高精度乘法

這一位的結果是a*10%10,進製的結果是a*10/10b看成是乙個整體,

#include

#include

using

namespace std;

vector<

int>

mul(vector<

int>

&a,int b)

// 去除前導0

while

(c.size()

>

1&& c.

back()

==0) c.

pop_back()

;return c;

}int

main()

除法

#include

#include

#include

using

namespace std;

// 商是 c,餘數是 r

vector<

int>

div(vector<

int>

&a,int b,

int&r)

reverse

(c.begin()

, c.

end())

;while

(c.size()

>

1&& c.

back()

==0) c.

pop_back()

;return c;

}int

main()

Acwing 792 高精度減法 模板

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

高精度模板

include include include includeusing namespace std define maxn 9999 define maxsize 10 define dlen 4 class bignum bignum const int 將乙個int型別的變數轉化為大數 big...

高精度模板

include include include include include using namespace std const int maxn 1000 struct bign bign operator const char num 過載運算子 bign const char num 支援初...