高精度計算 加法 減法

2021-08-05 21:03:14 字數 1807 閱讀 8430

#include

using

namespace

std;

int main()

大家肯定會說:這不就是最普通的a+b問題嗎?你是不是來搞笑的?!

但是你有沒有想過這樣乙個問題:

當a和b的資料過於大的時候怎麼辦呢?(比unsigned long long還大)

先讓我們回顧一下小學的加法豎式,如256+749:

749

+ 256

____________________________

749+ 256

________________1___________

00574

9+ 256

__________1_____1___________

00574

9+ 256

_____1____1_____1___________

00574

9+ 256

_____1____1_____1___________

1005

我們可以把兩個數字分別用乙個陣列儲存起來,每次位對位的運算,當和大於10的時候,便往前進一位,模擬豎式的過程,最終求出結果。

具體的**實現如下:

//輸入

void init()

//運算

int x=0; //上一位的進製。

for(int i=1;i<=lc;i++)

if (x>0) c[++lc]=x;//處理最高位的進製

由於我們是從地位開始儲存,所以接下來輸出要倒著輸。。

for (int i=lc;i>=1;i--) cout

《高精度減法內似於加法,我們還是先來模擬下豎式吧!

如:884-567

884- 567

____________________________

·884

- 567

____________________________7·

884- 567

____________________________

17 ·

884- 567

____________________________

317

不難發現,當我們在位對位計算時,出現被減數比減數小時,就會往前一位借一(即前一位減一,當前位加十),再計算。這也是高精度減法的重點(似乎我不說你們也知道。。。)

輸入還是跟高精度加法一樣:

void init()

接下來是關鍵部分

for (int i=1;i<=lc;i++)

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

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

但是你們有沒有想過:當第乙個數比第二個數大時,怎麼算呢?

我相信,讀過初中的朋友(好像都應該讀過),應該知道,當乙個絕對值小的數減去乙個絕對值大的數時,就要在結果前加上負號,再用絕對值大的減去絕對值小的,便是計算的結果。

現在補上**

if (strlen(sa)
好了,我們的高精度加法和減法就結束了

喜歡的請點讚,謝謝!

高精度加法 高精度減法

雖然以前自己就學習過,但是自己打出來的 目測效率不高,也不夠精簡 因此學習一下eden裡面的這一題 big integer add subtract ifndef big integer define big integer include include using std string usin...

高精度運算 加法 減法

高精度算是我高中期間沒有學明白的知識點之一,其實挺簡單的東西。核心思路是 按位模擬豎式運算 說白了就是模擬題。加法減法從低位到高位模擬,因為會進製借位 乘法也從低到高因為進製 除法要從高到低因為我們手算除法時也是從高到低保留餘數的。高精度減法 1 include2 using namespace s...

高精度演算法之加法減法

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