——————出自南昌理工學院acm集訓隊
我們用的最基礎的運算方法有四種,加 減 乘 除。在進行進行加減乘除的運算中較小的資料時,我們的編譯器是能夠充分且快速的進行運算的,但是如果要運算的資料是很大很大,超過了int定義的資料範圍的時候怎麼辦呢?這時候我們就要採用另一種的方法————高精度,來進行運算。
在這裡我就介紹三種,加減乘(除法…emm,這裡就不講了)。
高精度並沒有看上去那麼難,主要的思路就是把我們在草稿紙上的過程用**來實現。
加法和減法就是把數字乙個乙個拆開了進行運算,主要正確處理好進製和借位的問題,乘法就比加法和減法複雜一些,但也差不了很多。因為進行大資料的運算,用int,longlong之類可能存不下,所以我們用陣列來儲存所要進行運算的資料並且用char來定義,把它們當成字串來進行操作,並且我們是要把數字倒著存,這樣方便乙個乙個位置進行操作
emm,輸入輸出都是一樣的,所以我都寫一起了。
我直接在**裡解釋把。
#include
#include
#define maxn 10000
using
namespace std;
intmain()
for(
int i =
1; i <= len2;
++i)
//加法關鍵步驟
if(len1 < len2) len1 = len2;
for(
int i =
1; i <= len1;
++i)
if(aa[len1 +1]
>
0) len1++
;//判斷一下最前面一位是不是0,不是等下要輸出要多加一位
////減法關鍵步驟if(
(len1 < len2)||(
(len1 == len2)
&&strcmp
(a, b)
<0)
)for
(int i =
1; i <= len1; i++
) aa[i]
-= bb[i]
;//相減
}while
((aa[len1]==0
)&(len1 >1)
) len1--
;//判斷最前面的是不是零,是的話輸出的長度減一
////減法加法一樣的輸出
for(
int i = len1; i >=1;
--i)
////乘法關鍵步驟
int c[maxn]
,len3;
//定義乙個陣列來存相乘的結果
memset
(c,0
,sizeof
(c))
;for
(int i =
1; i <= len1;
++i)
} len3 = len1 + len2;
//不能確切的知道有多少位,所以只能從最大的長度開始往下減
while
(c[len3]==0
&& len3 >
1) len3--
;//為零就減一
for(
int i = len3; i >=1;
--i)
return0;
}
高精度的演算法就是模板,多做幾道題就記住了。
做題的話可以去洛谷做:a+b,a*b,階乘之和(這個就是運用到兩種)。
高精度演算法模板
簡單模擬就可以實現高精度加 減 乘 除 高精度除以低精度 template 高精度演算法 date 2020 08 22 include include using namespace std const int maxlen 1001 typedef struct hugeint bool neg...
演算法模板 高精度加法模板
高精度,字面意思理解,精度高,位數很多,乙個數的位數可能是1e3甚至更高 應用 手動模擬大整數的加法 兩個位數很大,位數可能達到1e3甚至更高的數加法運算直接儲存無法儲存,常規使用字串或者陣列來儲存時間複雜度是o max m,n 但是空間複雜度是2 m n m和n分別是兩個數的位數大小 模擬兩個數進...
個人模板 高精度演算法
一 求兩個高精度正數的和差積 1 include2 include3 include4 include5 using namespace std 6const int maxn 1000 7 char s1 maxn s2 maxn 8int ed1,ed2,n1,n2 9int num1 maxn...