演算法 高精度(模板)

2021-10-23 16:22:14 字數 1736 閱讀 9634

——————出自南昌理工學院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...