C語言的高精度運算

2021-08-19 12:46:56 字數 941 閱讀 2436

大整數加法詳情

實現思路:首先要解決的就是儲存200位整數的問題。顯然,任何c/c++固有型別的變數都無法儲存它。最直觀的想法是可以用乙個字串來儲存它。字串本質上就是乙個字元陣列,因此為了程式設計更方便,我們也可以用陣列unsigned an[200]來儲存乙個200位的整數,讓an[0]存放個位數,an[1]存放十位數,an[2]存放百位數……

那麼如何實現兩個大整數相加呢?方法很簡單,就是模擬小學生列豎式做加法,從個位開始逐位相加,超過或達到10則進製。也就是說,用unsigned an1[201]儲存第乙個數,用unsigned an2[200]表示第二個數,然後逐位相加,相加的結果直接存放在an1中。要注意處理進製。另外,an1陣列長度定為201,是因為兩個200位整數相加,結果可能會有201位。實際程式設計時,不一定要費心思去把陣列大小定得正好合適,稍微開大點也無所謂,以免不小心沒有算準這個「正好合適」的數值,而導致陣列小了,產生越界錯誤。

大整數乘法詳情

實現思路:乘法過程完畢。接下來從 aresult[0]開始向高位逐位處理進製問題。aresult[0]留下5,把4加到aresult[1]上,aresult[1]變為51後,應留下1,把5加到aresult[2]上……最終使得aresult裡的每個元素都是1位數,結果就算出來了

大整數除法詳情

實現思路:基本的思想是反覆做減法,看看從被除數裡最多能減去多少個除數,商就是多少。乙個乙個減顯然太慢,如何減得更快一些呢?以7546除以23為例來看一下:開始商為0。先減去23的100倍,就是2300,發現夠減3次,餘下646。於是商的值就增加300。然後用646減去230,發現夠減2次,餘下186,於是商的值增加20。最後用186減去23,夠減8次,因此最終商就是328。

所以本題的核心是要寫乙個大整數的減法函式,然後反覆呼叫該函式進行減法操作。

計算除數的10倍、100倍的時候,不用做乘法,直接在除數後面補0即可。

大整數減法與加法類同,就不單獨分析了。

高精度運算模版C語言

include include include include define maxx 100 using namespace std 高精度加法 void add char s1,char s2 b maxx 10 int l1 strlen s1 int l2 strlen s2 for i l...

大數 高精度運算 C語言

鴿了這麼多天,今天來學學acm的入門知識 高精度 也就是數字位數太多需要我們自己定義來表示 我們可以直接用陣列,或者將值和數的長度封裝成結構體來表示 include include define maxn 100000 typedef struct bignum bignum 那我們知道大數不能和其...

C 高精度運算

高精度加法vector int add vector int a,vector int b if t c.push back 1 return c 高精度減法 判斷a b 的大小,保證函式裡面是大的減小的 bool cmp vector int a,vector int b vector int a...