我們今天來聊聊高精度。
顧名思義,高精度就指精度很高
那麼精度很高又指什麼呢?
我們知道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 ...