大數的四則運算

2021-08-06 04:57:51 字數 3295 閱讀 2274

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[i]=m[len_m -1 -i]-'0'

;  scanf("%s"

,n);  

len_n=strlen(n);  

for(i=0;i<=len_n -1;i++)  

b[i]=n[len_n -1 -i]-'0'

;  if

(len_m>len_n)  

len_max=len_m;  

else

len_max=len_n;  

k=0;  

for(i=0;i<=len_max -1;i++)  

if(k!=0)    c[len_max]=1;  

if(c[len_max]==1)   printf(

"1");  

for(i=len_max -1;i>=0;i--)  

printf("%d"

,c[i]);  

return

0;  

}  

2. 減法

原理同加法一樣(不確定兩個數的大小關係)

比較兩數大小:先比較長度,再按位比較(按位比較沒寫)

[cpp]view plain

copy

#include 

#include 

intmain()  

,b[555]=;  

scanf("%s"

,m);  

len_m =strlen(m);  

for(i=0;i<=len_m -1;i++)  

a[i]=m[len_m -1 -i]-'0'

;  scanf("%s"

,n);  

len_n=strlen(n);  

for(i=0;i<=len_n -1;i++)  

b[i]=n[len_n -1 -i]-'0'

;  if

(len_m < len_n)      

}  i=len_n-1;  

while

(b[i]==0)  i--;   

for(;i>=0;i--)  

printf("%d"

,b[i]);  

}  else

}  i=len_m-1;  

while

(a[i]==0)  i--;   

for(;i>=0;i--)  

printf("%d"

,a[i]);  

}  return

0;  

}  

3. 乘法

原理上也是採用陣列模擬。

a[i]123

b[j]  12

用c[k]來儲存每次的運算結果,k=i+j;

c[i+j]=c[i+j]+a[i]*b[j];

這裡來模擬一次乘法過程:

123*     12

-------------

246   

+    123

-------------

1476

[cpp]view plain

copy

#include 

#include 

intmain()  

,b[555]=,c[1111]=;  

scanf("%s"

,m);  

scanf("%s"

,n);  

if(strlen(m)

len_m =strlen(m);  

for(i=0;i<=len_m -1;i++)  

a[i]=m[len_m -1 -i]-'0'

;  len_n=strlen(n);  

for(i=0;i<=len_n -1;i++)  

b[i]=n[len_n -1 -i]-'0'

;  for

(i=0;i

for(j=0;j

c[i+j]+=a[j]*b[i];  

for(i=0;i<2*len_m;i++)  

if(c[i]>=10)  

i=2*len_m;  

while

(c[i]==0)  i--;  

if(i<0)  printf(

"0");  

else

return

0;  

}  

4. 除法

除法也是利用陣列模擬,不過這裡不是直接按照除法的運算來,而是把除法轉變為減法運算,從而求得結果。

[cpp]view plain

copy

#include 

#include 

intlen1,len2;  

char

s1[905],s2[905];  

intre[905];  

void

sub()  

}  for(;i

s1[i]=s1[i]-s2[i]+'0'

;  for

(i=len2-1;i>j;i--)            

//低位開始檢測是否小於0

if(s1[i]<

'0')  

}  intmain()  

p++;  

if(len1==len2)  

break

;  for

(i=len2-1;i>=0;i--)             

//在s2前面補0,以便進行減法運算

s2[i+1]=s2[i];   

s2[0]='0'

;  len2++;  

s2[len2]='\0'

;  }  

i=0;  

while

(1)  

for(;iprintf("%d"

,re[i]);  

return

0;  

}   

大數四則運算

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

大數的四則運算

演算法與思路 大數的加,減,乘演算法比較簡單,模擬列豎式的計算過程就好 除法模擬實現比較困難,採用減法的形式實現,例如對於大數a b,如果a b,則直接輸出商為0,否則,將a的最後strlen b 位重複減去b,直到得數小於b,將執行減法的次數賦給商的個位,然後將b的最後添上乙個0,相當於乘以10 ...

大數四則運算模板

該模板能傳任意數字進去計算結果 不管是小算大的還是大的算小的都能得到正確結果 除法那裡只精確到小數點後10位數。乘法用加法來模擬 除法用減法來模擬 下面的注釋很詳細。include include using namespace std void string a,string b void del...