高精度
高精度加法,高精度減法,高精度乘低精度,高精度除以低精度,大概平時用的最多的就是這四個,模板有兩種(因為我現在不太會用vector,就用陣列也寫了個,23333)
高精度運算和人工手算差不多,就是模擬人工手算的過程,乘法有點不一樣,在下面有提到,大致也是模擬運算
廢話不多說,上模板
高精度加法
1//c = a + b, a >= 0, b >= 0
2 vector add(vector &a, vector &b)315
16if
(t) c.push_back(t);
17return
c;18 }
高精度減法
1//c = a - b, 滿足a >= b, a >= 0, b >= 0
2 vector sub(vector &a, vector &b)313
14while (c.size() > 1 && c.back() == 0
) c.pop_back();
15return
c;16 }
這裡高精度減法對於a < b 的情況我們特判下輸出個 - 就好了,模板第九行是比較巧的一步,因為我們減一位後 t 的取值範圍是(-10,10)t 可能是正數也可能是負數,對於正數我們可以直接拿來用,對於負數要向前面一位進1,相當於把 t 加10,這裡寫成(t + 10)% 10 就能把兩種情況寫在一起了
高精度乘低精度
1//c = a * b, a >= 0, b > 0
2 vector mul(vector &a, intb)3
1213
return
c;14 }
乘法和我們人模擬的算有點差別,比如156 * 23 算第一位的時候直接拿6 * 23,然後再拿5 * 23 + 進製,以此類推
高精度除以低精度
1//a / b = c ... r, a >= 0, b > 0
2 vector div(vector &a, int b, int &r)312
reverse(c.begin(), c.end());
13while (c.size() > 1 && c.back() == 0
) c.pop_back();
14return
c;15 }
上面是用vector的模板,對於不會用vector的我,用陣列寫了個,呃呃呃呃....
高精度加法
1 #include 2 #include 3 #include 45using
namespace
std;
6int add(int a, int
b);7
const
int n = 100000 + 10;8
char
x1[n], x2[n];
9int
a[n], b[n], c[n];
1011
intmain()
1227
28int add(int a, int
b)29
39if(t) c[id++] =t;
40return
id;41 }
高精度減法
1 #include 2 #include 3 #include 45using
namespace
std;
6int mun(int a, int
b);7
bool cmp(int a, int
b); //用來比較a,b誰大,判斷是輸出正數還是負數
8const
int n = 100000 + 10;9
char
x[n], y[n];
10int
a[n], b[n], c[n];
1112
intmain()
1325
26int mun(int a, int
b)27
3839
int id =mx;
40for(int i = mx - 1; i > 0; i --) //去除前導零
4145
return
id; //id是陣列c的長度46}
4748
bool cmp(int a, int
b)49
56return0;
57 }
高精度乘法
1 #include 2 #include 3 #include 456using
namespace
std;
7int mul(int a, int
b);8
const
int maxa = 100000 + 10;9
char
x[maxa];
10int
a[maxa], c[maxa], b;
1112
intmain()
1323
24int mul(int a, int
b)25
33if(t) c[id++] =t;
34return
id;35 }
高精度除法
1 #include 2 #include 3 #include 45using
namespace
std;
6int div(int b, int
k);7
const
int n = 100000 + 10;8
stringa;9
intb[n], c[n], k, t; //t是餘數
1011
intmain()
1226
27int div(int b, int
k)28
36return
id;37 }
輸出兩行,第一行是商,第二行是餘數
AcWing演算法基礎1 5
字首和與差分 兩個內容都比較少,就放一起寫了 設陣列 a 的前 n 項為a1 a2 a3 an 字首和陣列就是每一項是a陣列的前i項和,比如字首和陣列res,res 1 a 1 res 2 a 1 a 2 res n a 1 a 2 a n 字首和可以在o 1 的時間內計算一段區間內的累加和,比如區...
AcWing演算法基礎1 3
二分 二分分為整數二分和實數二分,其中整數二分模板有兩個 模板 整數二分模板 第一種模板將區間分為 l mid 和 mid 1,r 1 int bsearch 1 int l,intr 2 9return l 10 第二種模板把區間分為 l mid 1 和 mid r 需要注意的是,這裡算mid時要...
AcWing演算法基礎1 1
排序 快速排序 快排 寫題的時候用的不多基本都是直接sort 面試可能要手擼快排,上模板 1 void quick sort int q,int l,intr 2 12 quick sort q,l,j quick sort q,j 1 r 13 模板題 給定你乙個長度為n的整數數列。請你使用快速排...