大數加法運算演算法

2021-07-09 21:53:33 字數 1215 閱讀 3238

1.大數儲存的實現:作為實現大數儲存最常見的一類方法是利用陣列。將乙個有 n 位的大數存入陣列 ,每個陣列的乙個元素表示一位十進位制數。

2.大數加法運算

看下面乙個例子:

122345678902345 + 34567890012=122380246792357 

在上面的加法運算中 ,並沒有考慮參與運算的數的位數 , 即使有小數也是一樣。每次運算時只是利用加法運算的規則 對參與運算的每一位進行運算 ,每次運算都是在 10 以內進 行 ,並加上了前面的進製。通過這種運算就可以非常準確的 得到運算結果 ,並且可以不考慮位數和精度的問題。 考慮到計算機的儲存問題 ,如果我們採用陣列來儲存參 與運算的每個加數 ,則需要將上面參與運算的數看成字元 ,並 將原來的數翻轉 ,即採用下面的運算方法: 

543209876543221 + 21009876543=753297642083221 

我們看到運算結果與實際結果相反 ,因此只需要將結果 再翻轉一次輸出即可得到正確結果。這樣做的好處在於一旦 遇到低位向高位進製時 ,不會出現儲存上的問題。因為最高 位儲存在陣列的最後乙個元素 ,其後的儲存單元可用於存放 進製 ,同時運算是從陣列的第乙個元素開始的。

具體演算法如下:

定義兩個字元陣列s1[n],s2[n]

定義兩個整形陣列a[n]=和b[n]=

通過鍵盤對s1,s2賦值

strlen函式求出s1,s2長度len1,len2

通過迴圈將字串s1中的數值字元從後依次向前轉換為數字並賦於整形陣列a,其**如下:

c=0;

for(i=len1-1;i>=0;i--)

a[c++]=s1[i]-'0';

同理將字串s2轉化為整形陣列b

採用迴圈實現加法運算,其**如下:

for(i=0;i=10)

}

輸出結果,**如下:

for(i=n-1;i>=0;i--)

if(a[i])

break;

for(j=i;j>=0;j--)

printf("%d",a[j]);

printf("\n");

以上就是大數加法運算的演算法。

大數運算 加法

include include include void add const char a,const char b,char c if carry 0 result result length carry 0 while result length 0 c result result length...

大數運算 加法

究竟為什麼要用大數加法呢。我們來看下資料 bool型為布林型,佔1個位元組,取值0或1。bool型為int型,一般認為佔4個位元組,取值true false error。sbyte型為有符號8位整數,佔1個位元組,取值範圍在128 127之間。bytet型為無符號16位整數,佔2個位元組,取值範圍在...

大數運算 加法減法

第一篇博文有點小雞凍。在哈工程寒假集訓中第一次模擬中唯一一道對我有價值的題就是大數加法,隨後的幾次模擬中大數運算不斷,可見這是我們必須掌握的技能,本人智商較低,先講解下大數加法減法,乘除階乘或者結合其他知識的大數運算日後定會奉上。究竟為什麼要用大數加法呢。我們來看下資料 bool型為布林型,佔1個位...