大數運算 加法減法

2021-07-22 01:52:35 字數 1964 閱讀 5734

第一篇博文有點小雞凍。在哈工程寒假集訓中第一次模擬中唯一一道對我有價值的題就是大數加法,隨後的幾次模擬中大數運算不斷,可見這是我們必須掌握的技能,本人智商較低,先講解下大數加法減法,乘除階乘或者結合其他知識的大數運算日後定會奉上。

究竟為什麼要用大數加法呢。我們來看下資料:

bool型為布林型,佔1個位元組,取值0或1。

bool型為int型,一般認為佔4個位元組,取值true/false/error。

sbyte型為有符號8位整數,佔1個位元組,取值範圍在128~127之間。

bytet型為無符號16位整數,佔2個位元組,取值範圍在0~255之間。

short型為有符號16位整數,佔2個位元組,取值範圍在-32,768~32,767之間。

ushort型為無符號16位整數,佔2個位元組,取值範圍在0~65,535之間。

int型為有符號32位整數,佔4個位元組,取值範圍在-2,147,483,648~2,147,483,647之間。

uint型為無符號32位整數,佔4個位元組,取值範圍在0~4,294,967,295之間。

long型為64位有符號整數,佔8個位元組,取值範圍在9,223,372,036,854,775,808~9,223,372,036,854,775,807之間。

ulong型為64位無符號整數,佔8個位元組,取值範圍在0~18,446,744,073,709,551,615之間。

float型為32位單精度實數,佔4個位元組,取值範圍3.4e+10的負38次方~3.4e+10的38次方之間。

double型為64位實數,佔8個位元組,取值範圍1.7e+10的負308次方~1.7e+10的正308次方。

所以999999999999999999999999999999999999999+888888888888888888888888888888888888888888888=?

大數加法

基本思想:陣列要多長有多長啊,隨便定義個a[1000000],不就ok啦!

我都能寫出來,當然**是非常簡單了啦,我說下要注意的幾個問題:

1.     判斷最後陣列的長度

2.     去掉前導零

1

void add(char s1,char s2) //

需要兩個字串引數&&無返回值219

}2021for(i=m;(i>=0)&&(num1[i]==0);i--)//

找到第乙個不是零的數

22

當然方法不止一種。如果說上面這個清晰的話,那下面這個應該是省了點記憶體。

1

void add(char a,char b,chard)2

1819

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

20if(c[i]==48)len--;

21else

break;22

for(i=0;i<=len;i++)

23 d[i]=c[len-i];

24 }

好吧,這個**還有個好處就是讓我記住了『0』和『9』的ascii碼是48和57。

大數減法

減法的演算法也是從低位開始減,先要判斷減數和被減數那乙個位數長,減數字數長是正常減;被減數字數長,則被減數減減數,最後還要加上負號;兩個位數長度相等時,最好比較那乙個數字大,否則負號會處理的很繁瑣;處理每一項時,如果前一位相減有錯位,就先減上一位的錯位,無則不減,再去判斷是否能夠減開被減數,如果減不開,就要借位後再去減,同時錯位為1,否則置錯位為0.

1

//d2 > d1,如果需要比較大小自己加乙個不麻煩。

2void dec(char *d1, char *d2, char *out)3

18while(len_max > 0)19

27if(last_j)

28out[0] ='1'

;29else

30out[0] ='0'

;31 }

哦了。就這麼多了。大數乘法除法神馬的敬請期待!

大數加法 減法 乘法 除法

大數加法 實現 include include typedef char str 1000 void printnum int sum int len 輸出 void add str a int len a str b int len b 計算a b 只能 while len a 1 if c 0 ...

大數加法,減法,乘法總結

大數問題 即因為要參加運算的數的位數很大,正常的加減乘除運算子精度不夠,解決不了的數的運算。大數運算 就是以陣列的形式儲存每一位數,模擬正常加減乘除運算的過程。大數加法 用兩個字元型陣列分別儲存要相加的兩個大數,因為加法運算是從兩個最低位開始依次相加,所以結果以倒序的方式儲存。例如 得到結果為225...

高精度運算 加法 減法

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