原理在**的注釋裡。
#include
#include
#include
intcompare
(char a,
char b)
//編寫函式比較兩個大數大小。
//a>b返回1,a=b返回0,a
return0;
}void
add(
char a,
char b,
char c)
//實現兩個大數相加
a1[i]
='0'
; i--;}
}}if(l>0)
//a的位數大於b 由上直接繼承a的前幾位
for(
;k>=
0;k--
) c[k]
=a1[k];if
(a1[0]
=='0'
||(l==0&&
((a1[0]
-'0'
+b[0])
>
'9')))
c[0]
='1';}
}else
add(b,a,c)
;//以上是a>=b的情況a}
void
min(
char a,
char b,
char c)
//大數減法if(
compare
(a1,b)
>0)
a1[i]
='9'
; i--;}
}}if(l>0)
//a的位數大於b,c繼承a的前幾位
for(
;k>=
0;k--
) c[k]
=a1[k]
;int cnt=0;
//除去c前幾位可能出現的0
for(
;cnt<=h1-
1;cnt++
)for
(i=0
;cnt<=h1-1;
) c[i]=0
;}else
min(b,a,c)
;//以上是a>=b的情況a}
void
mul(
char a,
char b,
char c)
//大數乘法,遍歷b的位數n,對b的各位*a*10^i求和。
strcat
(a,"0");
}}void
div(
char a,
char b,
char c)
//大數除法
,b1[
100]=;
//避免修改原數,定義新的字元陣列儲存兩個大數
strcpy
(a1,a)
;strcpy
(b1,b)
;int cnt,k=
0,i=
0,h1=
strlen
(a)-
1,h2=
strlen
(b)-1;
if(compare
(a1,b1)
<0)
if(compare
(a1,b1)==0
)while
(h1!=h2)
while
(i<=k)
c[i++
]=cnt+
'0';
b1[h2--]=
0;}if
(c[0]==
0)}int
main()
,b[100]=
,c[100]=
;scanf
("%s"
,a);
scanf
("%s"
,b);
add(a,b,c)
;printf
("a+b=");
puts
(c);
printf
("\n");
strcpy
(c,"\0");
min(a,b,c)
;printf
("a-b=");
puts
(c);
printf
("\n");
strcpy
(c,"\0");
mul(a,b,c)
;printf
("a*b=");
puts
(c);
printf
("\n");
strcpy
(c,"\0");
div(a,b,c)
;printf
("a/b=");
puts
(c);
return0;
}
大數的運算
大數運算指的是對c語言中那些大到超出表示範圍的數的運算,比如9999999999999999999999999999999 9999999999999999999999999。c語言中無法將這麼大的乙個數儲存到變數中,這裡就要用到大數的運算了。大數加法 思路很簡單,就是把這個 大數 以字串的形式存入...
大數的基本運算 大數乘法
大數 即超過了計算機定義型別的範圍的數,如126349678984 1321656546446546546546,這種運算的結果 太大,超過了基本型別的範圍,發生溢位,這樣我們就需要運用大數的演算法來解決這個問題了。大數乘法 大數乘法 include include using namespace ...
大數的運算思想
大數計算的因數和結果精度一般是少則數十位,多則幾萬位。在c c 語言中定義的型別中精度最多只有二十多位,因而我們採取用鍊錶存貯的方式來存放大數。在計算中會用到從高位開始計算,和從低位開始計算數值的兩種情況。所以我們將鍊錶定義為雙向鍊錶,其中為乙個單元來存貯資料,乙個指標指向前方的資料,另乙個指向後的...