C 超大數的四則運算

2021-10-09 02:27:21 字數 3305 閱讀 2476

寫在前面

起因是一道題目,說來慚愧,我記的離散數學課上有教過這個。

思路加法

從低位到高位,逐位想加,產生進製則高位加1

減法從低位到高位,逐位想減,產生借位則高位減1

乘法從低位到高位,乘數逐位乘以被乘數,儲存在第三個陣列中,判斷陣列每個元素是否大於10,若大於10,高位加(元素/10),元素 %= 10

除法用輾轉相除法,從高位到低位,被除數 除以 除數 得到商及餘數,下一位被除數 = 被除數 + 餘數 * 10

**

#include

#include

#define maxn 1001

void

jiafa()

;void

jianfa()

;void

chenfa()

;int

main

(void

)printf

(" %d\n"

, r)

;//輸出最後的餘數。

jiafa()

;jianfa()

;chenfa()

;return0;

}void

jiafa()

,int2[maxn]=;

scanf

("%s %s"

, str1, str2)

; len1 =

strlen

(str1)

; len2 =

strlen

(str2)

;//反轉陣列

for(i = len1 -

1, j =

0; i >=

0; i--

)for

(i = len2 -

1, j =

0; i >=

0; i--

) len1 = len1 > len2 ? len1 : len2;

//低位相加

for(i =

0; i < len1; i++)}

for(i = maxn -1;

(i >=0)

&&(int1[i]==0

); i--);

if(i >=0)

for(

; i >=

0;i--

)printf

("%d"

, int1[i]);

else

printf

("0\n");

printf

("\n");

}void

jianfa()

,int2[maxn]=;

scanf

("%s %s"

, str1, str2)

; len1 =

strlen

(str1)

; len2 =

strlen

(str2)

;//反轉陣列

for(i = len1 -

1, j =

0; i >=

0; i--

)for

(i = len2 -

1, j =

0; i >=

0; i--

)//判斷長度

//長度大 - 長度小 正常

//長度小 - 長度大 需在最前面新增 -

//長度相同

//數值大- 數值小 正常

//數值小 - 數值大 需在最前面新增 -

if(len1 < len2 ||

(strcmp

(str1,str2)

<0)

) flag =0;

if(flag)

}for

(i = maxn -1;

(i >=0)

&&(int1[i]==0

); i--);

if(i >=0)

for(

; i >=

0;i--

)printf

("%d"

, int1[i]);

else

printf

("0\n");

}else

}for

(i = maxn -1;

(i >=0)

&&(int2[i]==0

); i--);

printf

("-");

if(i >=0)

for(

; i >=

0;i--

)printf

("%d"

, int2[i]);

else

printf

("0\n");

}printf

("\n");

}void

chenfa()

,int2[maxn]

=,int3[maxn]=;

scanf

("%s %s"

, str1, str2)

; len1 =

strlen

(str1)

; len2 =

strlen

(str2)

;//反轉陣列

for(i = len1 -

1, j =

0; i >=

0; i--

)for

(i = len2 -

1, j =

0; i >=

0; i--

)//乘數的每一位 乘以 被乘數

for(i =

0; i < len1; i++

)for

(j =

0; j < len2; j++

) int3[i + j]

= int1[i]

* int2[j]

;for

(i =

0; i < len1 + len2; i++)if

(int3[i]

>10)

for(i = maxn -1;

(i >=0)

&&(int3[i]==0

); i--);

if(i >=0)

for(

; i >=

0;i--

)printf

("%d"

, int3[i]);

else

printf

("0\n");

printf

("\n");

}

大數四則運算

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 ...