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