高精度加 減 乘 除演算法實現

2021-08-30 18:03:25 字數 2418 閱讀 3341

在說高精度加減乘除運算之前,我們先搞明白什麼是高精度運算?

實際上高精度就是說參與運算的資料和運算結果的範圍,超出標準資料型別能表示的資料大小範圍的運算。這個時候,如果要得到正確的計算結果,顯然不能依靠普通方法實現了。而要在普通運算原理的基礎上,加以輔助演算法來實現超大資料的計算。例如:求兩個100位的資料的和,或者計算兩個100位的數字乘積。這時就要用到高精度演算法了。

一、高精度加法:

高精度加法的實現原理:

1、計算結果的位數

358934760892734899共18位

38960302975237462共17位

故結果不會超過19位。

2、將要計算的數字分割成多段,按照順序排列(這裡以0-32767作為每一儲存單位儲存的數的限制):

(為提高空間利用效率,可以乙個儲存單位儲存多位數。)

3、將兩數相加。

4、輸出結果。

從高位到低位依次輸出。除最高位以外,其他低位上不足4位的要在前面補上0。

5.**實現如下

#include#includeusing namespace std;

int main()

len++; //下面是去掉最高位的0,然後輸出。

while((a[len]==0)&&(len>1)) len--;

for(i=len;i>=1;i--)

cout<

//注意:兩個數相加,結果的位數,應該比兩個數中大的那個數多一位。 

二、高精度減法:

高精度減法的實現原理:

1.高精度減法相比高精度加法來說,稍微複雜一點,因為減法在差為負數時處理的細節更多一點:當被減數小於減數時,差為負數,差的絕對值是減數減去被減數;在程式實現上用乙個變數來儲存符號位,用另乙個陣列存差的絕對值。

2.實現流程

(1).先比較大小

(2).決定輸出符號,為正還是為負

(3).按位減法,並注意處理借位

3.**實現如下:

#includeusing namespace std;

int compare(string s1,string s2);

int main()

} a[0]++;

while((a[a[0]]==0)&&(a[0]>1)) a[0]--;

for(i=a[0];i>=1;i--)

cout<1)) b[0]--;

for(i=b[0];i>=1;i--)

coutif(s1.length()s2[i]) return 0;

if(s1[i]

三、高精度乘法實現

高精度乘法實現原理:

1.由於數字較大,無法使用簡單的資料結構進行儲存,選用陣列和字串來儲存數字,字串方便我們對於高位整數的輸入,而整形陣列的簡便有利於每個位數的計算,結合兩者優點便可實現高精度乘法。

2.實現過程:

(1).通過兩個字串輸入兩個整數

(2).引入兩個陣列,將每個整數切割儲存到陣列裡面

(3).進行每一位的運算

(4).處理進製

(5).輸出結果

3.**實現如下:

#include#includeusing namespace std;

int main()

len=a[0]+b[0]+1; //去掉最高位的0,然後輸出

while((c[len]==0)&&(len>1)) len--; //為什麼此處要len>1??

for(i=len;i>=1;i--)

cout<

四、高精度除法實現

高精度除法實現原理:高精度除法這一塊比較複雜,它可以分為兩種情況:

第一種情況:高精除以低精,實際上就是對被除的每一位,包括前面的餘數都除以除數。

**實現如下:

#include#include#includeusing namespace std;

int main()

lenc=1;

while (c[lenc]==0&&lenc

第二種情況:高精除以高精

**實現如下:

#include#includeusing namespace std;

int a[100],b[100],c[100];

int compare(int a,int b)//比較a、b,若a>b為1;若ab[0])

return 1;

if(a[0]0;i--)//從高位到低位比較

}int main()

}while(c[0]>0&&c[c[0]]==0)//刪除前導0

c[0]--;

cout<<"商為:";

if(c[0]==0)//輸出結果

cout<<0<0;i--)

cout<0;i--)

cout《原作者為:

高精度演算法,加減乘除

高精度演算法的兩個基本問題 高精度數的表示和高精度數的基本運算 1.高精度數的表示 首先我想到的是do while 迴圈逆序存放在陣列之中,但書中用string接受並且將其轉化成數字,存放在陣列之中 int arr 100 string str cin str int len str.length ...

高精度演算法(加減乘除)

最近開始學習解決大數問題,在這裡記錄下自己的學習情況。問題描述 我有乙個非常簡單的問題。給定兩個整數a和b,你的工作是計算a b的和。輸入 輸入的第一行包含整數t 1 t 20 表示測試用例的數量。然後是t行,每行包含兩個正整數,a和b.請注意,整數非常大,這意味著您不應該使用32位整數來處理它們。...

高精度演算法(加減乘除)

在遇到一些例如1e 100000這樣的資料的時候,我們無法處理,那麼我們需要高精度來處理,用long long都沒有辦法處理,利用高精度處理方法是用字串的手法處理。高精度加法 思路 就是我們人類的加法,從最小位數開始,先算好以後再進行進製操作即可,考慮進製的問題。include using name...