基礎演算法 高精度處理之加法

2021-08-13 22:33:07 字數 1330 閱讀 3071

我們今天來聊聊高精度。

顧名思義,高精度就指精度很高

那麼精度很高又指什麼呢?

我們知道in

t (整型)的表示範圍是 −2

31 ~231

−1 l

ongl

ong (長整型)的範圍是 −2

63 ~ 263

−1那麼我們就可以認為長整型精度較高,也可以說是表示範圍更大

那麼高精度有什麼用處呢?

我們接下來看一道例題。

讀入兩個整數a,b,輸出a+b

兩個整數a,b(0≤

a,b≤

10500

)乙個整數a+b

1 2大致地看一下這題,可能發現這題其實並沒有什麼不對,只要讀入輸出即可

如果你抱著這樣的心態交**,那麼迎接你的將會是wa,甚至爆零

這是為什麼呢?且聽下回分解

請看資料範圍!

沒錯,不論你用長整型,或者是無符號長整形,甚至是int128,那都是存不下的

這就是為什麼我們需要高精度

接下來我們講高精度的原理。

我們先分析一下數的構成

仔細一看,數是由個位、十位、百位等構成的

那麼我們就可以說乙個數是由多個數字構成的

我們不妨將每個數字都分開來存在乙個陣列裡,以此加大數的表示範圍

問題就好解決了

陣列開多大,數的表示範圍就有幾位(比如上面那題我們可以開a[

505]

) 我個人習慣使用如下的結構體:

struct hugeint

a;

注意,這裡的a[

1]代表個位,a[

2]代表十位,以此類推

接下來我們只要模仿豎式的過程,就可以輕鬆地進行高精度加法了

還記得豎式麼?

5 6

3 3——————————

8 9

於是乎,**呼之欲出

非壓位優化高精度加法模板.cpp

hugeint plus(hugeint a,hugeint b)//作為加數的a,b

ans.l++;//每一位長度+1

}return ans;

}

輸出模板:

void print(hugeint a)

高精度是oi中非常重要的元素,本人在這裡只列出了加法,大家可以自行研究一下減法、乘法和除法,實在理解不了背下來也是可行的方法。

原創 by venus

寫的不好大佬輕噴

基礎演算法 高精度計算 高精度加法

輸入兩個數到兩個變數中,然後用賦值語句求他們的和,輸出。但是,我們知道,在c 中任何資料型別都有一定表示範圍。當兩個被加數很大時,上述演算法顯然不能求出精確解,因此尋求另外一種方法。在讀小學時,我們做加法都採用豎式方法,這樣,我們可以寫出兩個整數相加的演算法。我們用陣列a b分別儲存加數和被加數,用...

高精度演算法 791 高精度加法

給定兩個正整數,計算它們的和。輸入格式 共兩行,每行包含乙個整數。輸出格式 共一行,包含所求的和。資料範圍 1 整數長度 100000 輸入樣例 1223 輸出樣例 35注意點 1.兩個整數較大,用字串來存,這樣的話,可以呼叫它的size 方法 2.將兩個大的整數,存入vector陣列中,最好把整數...

高精度演算法之加法減法

高精度加法是高精度演算法裡面最容易思考的乙個 其實現過程並不難 注意的地方應該是進製的問題 思路 我們可以設兩個陣列a 10090 b 10090 這兩個陣列的作用是用來儲存高精度數的數字 string型別字串str1,str2 用來輸入資料 然後貼 include include include ...