過載 高精度計算 (一)基礎

2021-08-01 09:32:48 字數 875 閱讀 1168

在使用計算機進行計算時,精度提高了,但有時會計算一些很大的數,它們超出了c++中定義的資料型別,

所以,我們要用一些技巧來計算它們。

高精度數一般都是成百上千位的,位數不會確定。

首先,我們要明確:高精度數在c++中沒有定義,我們需要自己編寫程式來計算!!!

大家現在回憶一下所學的計算知識,就可以發現,我們在小學所學的豎式計算,是很容易計算不定長度的兩數相加、減、乘、除(雖然沒有計算器方便)。

我們就可以順著這個思路走下去,以下是細節方面。

上面已經說過原因,所以,我們讀入必須使用字串,再轉到整型陣列。

注意:

我們為了在計算時末位對齊,除了高精除低精之外,都採用倒序儲存。

void scan(int a)

除此之外,我們也可以使用迴圈加陣列的方法來讀入(**請讀者自己去想)。

因為我們在存高精度數時,除高精除低精之外,均採用倒序儲存。

所以,我們在輸出時要採用倒序輸出。

void print(int a)

if(a[i]a[i+1]--;a[i]+=10;}

c[i]=a[i]-b[i];

這裡先給出高精乘高精的進制法。

c[i+j-1]=a[i]*b[j]+x+c[i+j-1];

x=c[i+j-1]/10;

c[i+j-1]%=10;

除法是由減法與乘法模擬實現的,所以,我們可以使用減法和乘法來實現除法**

基礎部分到此結束,在下一節中,我們將學習高精度加法

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

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

1 高精度基礎計算

1.高精度計算背景 2.高精度計算原型模擬 3.掌握高精度基礎計算 1.高精度計算背景 計算機的基礎資料型別都有長度限制,在c 中,以整數為例,最大長度是long long即8個byte,64位,轉成整數範圍是 2 63,2 63 如果數字超過這個範圍,就會因為數字的溢位,無法輸出你想要的結果。這時...

高精度過載模板

高精度過載模板,bignum,過載了 輸入操作 輸出操作.print 賦值操作 四則運算 冪次運算 取模運算 比較操作 和 include using namespace std define maxn 9999 define maxsize 1000 define dlen 4 class big...