大數的運算

2021-10-20 01:23:46 字數 2475 閱讀 1272

原理在**的注釋裡。

#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 語言中定義的型別中精度最多只有二十多位,因而我們採取用鍊錶存貯的方式來存放大數。在計算中會用到從高位開始計算,和從低位開始計算數值的兩種情況。所以我們將鍊錶定義為雙向鍊錶,其中為乙個單元來存貯資料,乙個指標指向前方的資料,另乙個指向後的...