高精度演算法

2021-10-23 03:39:19 字數 2124 閱讀 5229

#include

#include

#include

using

namespace std;

struct wint:vector<

int>

//用標準庫vector做基類,完美解決位數問題,同時更易於實現

wint&

check()

//在各類運算中經常用到的進製小函式,不妨內建

while

(back()

>=10)

return

*this

;//為使用方便,將進製後的自身返回引用}}

;//輸入輸出

istream&

operator

>>

(istream &is,wint &n)

ostream&

operator

<<

(ostream &os,

const wint &n)

//比較,只需要寫兩個,其他的直接代入即可

//常量引用當引數,避免拷貝更高效

bool

operator!=(

const wint &a,

const wint &b)

bool

operator==(

const wint &a,

const wint &b)

bool

operator

<

(const wint &a,

const wint &b)

bool

operator

>

(const wint &a,

const wint &b)

bool

operator

<=

(const wint &a,

const wint &b)

bool

operator

>=

(const wint &a,

const wint &b)

//加法,先實現+=,這樣更簡潔高效

wint&

operator+=

(wint &a,

const wint &b)

wint operator

+(wint a,

const wint &b)

//減法,返回差的絕對值,由於後面有交換,故引數不用引用

wint&

operator-=

(wint &a,wint b)

}return a.

check()

;}wint operator

-(wint a,

const wint &b)

//乘法不能先實現*=,原因自己想

wint operator*(

const wint &a,

const wint &b)

wint&

operator*=

(wint &a,

const wint &b)

//除法和取模先實現乙個帶餘除法函式

wint divmod

(wint &a,

const wint &b)

}return ans;

}wint operator

/(wint a,

const wint &b)

wint&

operator/=

(wint &a,

const wint &b)

wint&

operator%=

(wint &a,

const wint &b)

wint operator

%(wint a,

const wint &b)

//實現乙個快速冪,可以看到和普通快速冪幾乎無異

wint pow

(const wint &n,

const wint &k)

//通過過載運算子,還可以實現++、--、^、!、邏輯運算子等很多運算,十分簡單,此處都不寫了

intmain()

//現在你完全可以像int一般便捷地使用wint,如下

演算法 高精度乘法2(高精度乘高精度)

題目描述 高精度乘,求兩個很大的非負整數相乘的結果。輸入 2個非負整數,每個一行,每個整數不超過240位。輸出 乙個整數,表示相乘的結果。例子 為了和演算法對應方便,用上面數乘下面數的方法12 5 2512 5502 5312 5為了運算方便,將上面兩數倒置,得到的結果也為倒序下標0 1234 56...

高精度演算法 791 高精度加法

給定兩個正整數,計算它們的和。輸入格式 共兩行,每行包含乙個整數。輸出格式 共一行,包含所求的和。資料範圍 1 整數長度 100000 輸入樣例 1223 輸出樣例 35注意點 1.兩個整數較大,用字串來存,這樣的話,可以呼叫它的size 方法 2.將兩個大的整數,存入vector陣列中,最好把整數...

高精度演算法

任務 高精度,計算大數乘小數 引數 乘法函式mul引數為 被乘數a,儲存最終結果的ans陣列,乘數b 結果 ans陣列中ans 0 為最高位,以此類推 include include using namespace std void mul char a,char ans,int b 任務 高精度,...