《更新提示》
《正文》
這是乙個無符號整型高精度類的模板,以108
10^8
108壓位,支援加減乘法取模運算和算術左移右移運算,乘法用的是樸素實現方式,時間複雜度o(n
2)
o(n^2)
o(n2
),除法用的是倍增實現,時間複雜度o(n
logn)
o(n\log n)
o(nlogn)
,支援直接輸入輸出。
比較和運算的函式就寫了常用的幾個,可能會長期更新。一般用到高精度的題目沒有特殊說明用的就是這個模板。
#include
using
namespace std;
const
int size =
10020
, base =
1e8;
struct bign
inline
void
read
(void
)// 直接讀入
inline
void
print
(void
)// 直接輸出,帶換行
friend
bool
operator
<
(bign a,bign b)
// 比較運算子 <
friend
bool
operator
>
(bign a,bign b)
// 比較運算子 >
friend bign operator
+(bign a,bign b)
// 加法
friend bign operator
-(bign a,bign b)
// 減法
while
( c.len &&
!c.d[c.len]
) c.len--
;return c;
}friend bign operator
*(bign a,bign b)
// 乘法
while
( c.len &&
!c.d[c.len]
) c.len--
;return c;
}inline bign shl
(void
)// 算術左移
while
( len &&
!d[len]
) len--
;return
*this;}
inline bign shr
(void
)// 算術右移
while
( len &&
!d[len]
) len--
;return
*this;}
friend bign operator
/(bign a,bign b)
// 除法
return res;
}friend bign operator
%(bign a,bign b)
// 取模
friend
bool
operator
<=
(bign a,bign b)
friend
bool
operator
>=
(bign a,bign b)
friend
bool
operator
==(bign a,bign b)
friend
bool
operator
!=(bign a,bign b)
// 常見的比較運算子
friend
void
operator+=
(bign &a,bign b)
friend
void
operator-=
(bign &a,bign b)
friend
void
operator*=
(bign &a,bign b)
friend
void
operator/=
(bign &a,bign b)
friend
void
operator%=
(bign &a,bign b)};
inline bign euclid
(bign a,bign b)
return res *
( a.len >
0? a : b );}
// 二進位制歐幾里得演算法
intmain
(void
)
《後記》
高精度模板
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 支援初...
高精度模板
include include include includeusing namespace std define maxn 9999 define maxsize 10 define dlen 4 class bignum 建構函式 bignum const int 將乙個int型別的變數轉化為大...