寫在前面
起因是一道題目,說來慚愧,我記的離散數學課上有教過這個。
思路加法
從低位到高位,逐位想加,產生進製則高位加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 ...