C語言實現大數四則運算

2022-05-05 09:03:07 字數 3115 閱讀 9311

眾所周知,c語言中int型別是有限制,不能進行超過其範圍的運算,而如果採用float型別進行運算,由於float在記憶體中特殊的儲存形式,又失去了計算的進度。要解決整個問題,一種解決方法是通過字串陣列實現資料的儲存,然後實現它們之間四則運算的函式。

為了實現字元陣列之間的運算,要考慮數值的正負性,數字的長度以及具體儲存的數字

typedef struct

numnum,*snum;

整個程式使用了一下的函式

snum exptonum(char exp);//

將輸入字串轉換為對應結構體

void reverse(int a,int len);//

陣列逆序

int compareabs(snum left,snum right);//

比較兩數絕對值大小

snum anti_add(snum left,snum right);//

元加法snum anti_sub(snum left,snum right);//

元減法

snum add(snum left,snum right); //

加法 snum sub(snum left,snum right); //

減法snum multiply(snum left,snum right); //

乘法 snum divide(snum left,snum right); //

除法 snum mod(snum left,snum right);//

求摸運算

函式的定義

1

snum multiply(snum left,snum right) 89

if(left->symbol==right->symbol)else

1415

1617

for(i=0;ilen;i++)

21}

2223

2425

////

進製化簡

26int len = left->len+right->len-1; //

長度27

28//

29for(i=0;i)else39}

40}

4142

4344

////

捨去多餘0位

45for(i=len-1;i>=0;i--)else

51}

52if(len==0)55

56 mul->len=len;

5758

free

(left);

59free

(right);

60return

mul;61}

6263

6465

//減乙個數等於加上乙個數的相反數

66snum sub(snum left,snum right)

7071

//比較兩數絕對值大小

72int

compareabs(snum left,snum right)else

if(left->lenlen)else

83if(left->number[i]number[i])

86 i--;

87}

88return

0; //

兩者絕對值相等 89}

90}9192

93 snum exptonum(char

exp)else

105106

//輸入到陣列

107int count=0

;108

while(exp[locan]!='\0'

)113

114int i=count;

115for(i=count;i1;i++)

118119 temp->len=count;

120121

122//

陣列逆序從個位開始計算

123 reverse(temp->number,temp->len);

124125

return

temp;

126}

127128

//陣列逆序

129void reverse(int a,int

len)

136}

137138

139140

//元加法,假設left和right都為正數或0

141snum anti_add(snum left,snum right)else

153154 i++;

155}

156157

if(left->number[i]!=0

)160

161 left->len=i;

162return

left;

163}

164165

//實現正數或負數的加法

166snum add(snum left,snum right)else

else

177}

178return

temp;

179}

180181

//元減法,假設left>=right,left和right均為正數或0

182snum anti_sub(snum left,snum right)else

193194 count+=1

;195

196 i++;

197}

198199

200201

202//

捨掉多餘的0

203for(i=count-1;i>=0;i--)else

209}

210211

if(count==0

)214

215 left->len=count;

216return

left;

217218 }

C語言 C 實現大數四則運算

所謂大數,就是數字非常 100 的大,不管是int還是long long int都儲存不下的數,如何進行加減乘除四則運算,這種情況在計算機的運算中還是很常見的,現將大致思路寫上,並附上 以供參考。首先資料必然是不能以int或者long long int儲存,那麼只能以字串或者字元陣列的形式儲存。而且...

c語言實現簡單四則運算

c語言實現簡單四則運算 一 專案開始 二 閱讀 srand unsigned time null 通過呼叫隨機函式,將生成的100以內的隨機整數賦給不同的變數,一部分用於四則表示式資料的 而賦給變數c的隨機數則用於結合switch語句控制程式跳轉執行 不同的分支,即不同的四則運算,如下 c rand...

大數四則運算

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