大數的四則運算(全)

2021-10-03 07:25:22 字數 2309 閱讀 4767

持續更新中…

#include

#include

#include

using

namespace std;

//大整數的四則運算

struct bign};

//將整數轉換為 bign,例如23456,d[0]=6,...,d[5]=2

bign change

(string str)

//大數的比較

intcompare

(bign a, bign b)

//1:a大;0:相等;-1:a小

return0;

}//大數的加法

bign add

(bign a, bign b)

if(carry !=0)

c.d[c.len++

]= carry;

return c;

}//大數的減法

//注意:使用sub函式前要先呼叫compare函式比較兩個數的大小 ,如果被減數小於減數,需要交換兩個變數,然後輸出負號。

bign sub

(bign a, bign b)

//a-b

c.d[c.len++

]= a.d[i]

- b.d[i];}

//去掉高位的0,同時保留至少一位

while

(c.len >

1&& c.d[c.len-1]

==0) c.len--

;return c;

}//高精度與低精度的乘法

//注意:如果a和b中存在負數,需要先記錄下其符號,然後取他們的絕對值代入函式。

bign multi

(bign a,

int b)

//處理進製,與加法不同,此時carry可能涉及多位數

while

(carry !=0)

return c;

}//高精度與高精度的乘法

//注意:如果a和b中存在負數,需要先記錄下其符號,然後取他們的絕對值代入函式。

bign doublemulti

(bign a, bign b)

//判斷有效位數

for(

int i=a.len+b.len;i>=

0;i--)if

(c.d[i]!=0

)return c;

}//高精度與低精度的除法

bign divide

(bign a,

int b,

int&r)

//a/b,其中r為餘數

else

c.d[i]=0

;}//處理一開始有0的情況,保留至少一位

while

(c.len >

1&& c.d[c.len -1]

==0) c.len--

;return c;

}//輸出

void

print

(bign a)

intmain()

結果:

***

****

****

****

***加****

****

****

****

****

**2222222222**

****

****

****

****減***

****

****

****

****

***0

****

****

****

****

**乘***

****

****

****

****

***11111111110**

****

****

****

****

double乘***

****

****

****

****

***15129**

****

****

****

****除***

****

****

****

****

***111111111

餘數r:

大數四則運算

include include includeusing namespace std define m 1000000000000000 大數加法 將數字以字串的形式傳入add加法函式,在函式內部完成字串 陣列的轉換,然後在陣列中逐位進行相加,再判斷該位相加後是否需要進製,為了方便計算,我們將數字的...

大數的四則運算

演算法與思路 大數的加,減,乘演算法比較簡單,模擬列豎式的計算過程就好 除法模擬實現比較困難,採用減法的形式實現,例如對於大數a b,如果a b,則直接輸出商為0,否則,將a的最後strlen b 位重複減去b,直到得數小於b,將執行減法的次數賦給商的個位,然後將b的最後添上乙個0,相當於乘以10 ...

大數的四則運算

1.加法 輸入採用字元陣列儲存,然後將輸入存在整形陣列裡,然後逐位相加即可,同時注意進製處理。cpp view plain copy include include intmain b 555 c 555 scanf s m len m strlen m for i 0 i len m 1 i a ...