大整數的儲存
將大整數的每一位存到陣列中
陣列下標小的存低位 (高位的進製在最後)
模擬人工加法的過程
最後補上進製
#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/10
將b
看成是乙個整體,
#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 支援初...