高精度演算法將陣列的操作發揮至淋漓,是對各類模擬運算處理的細化考量,* 全域性變數初始為空,多次輸入自行新增memset從模擬加法進製,小試牛刀,到減法中「大減小」模型的構造,
從乘法的錯位運算,直到多法結合的高精度除法,
只有踩過坑,才知曉細節挖掘的不易。
// 加法
#include
#include
#include
#define max 100010
using namespace std;
char sa[max]
,sb[max]
;int a[max]
,b[max]
,len,lena,lenb;
intmain()
if(a[len+1]
>
0)len++
;for
(int i=len;i>=
1;i--
)printf
("%d"
,a[i]);
return0;
}
// 減法
#include
#include
#include
#define max 100010
using namespace std;
char sa[max]
,sb[max]
;int a[max]
,b[max]
,flag,len,lena,lenb;
intmain()
//兩數相同相減為0
for(
int i=len;i>=
1;i--
)//位數相同,從高位開始逐步比較
if(a[i]
)//得出a數小於b數}if
(lena//互換,構造大數減小數
for(
int i=
1;i<=len;i++
) a[i]
-=b[i];}
while
(!a[len]
)len--
;//去除前導0
if(flag)
printf
("-");
//小數減大數結果為負
for(
int i=len;i>=
1;i--
)printf
("%d"
,a[i]);
return0;
}
// 乘法
#include
#include
#include
#define max 100010
using namespace std;
char sa[max]
,sb[max]
;int a[max]
,b[max]
,c[max]
,len,lena,lenb;
intmain()
//任一為0,乘積為0
for(
int i=
1;i<=lena;i++
)for
(int j=
1;j<=lenb;j++
) c[i+j-1]
+=a[i]
*b[j]
;//模擬豎式乘法,每次乘一位,錯開
for(
int i=
1;i<=len;i++
)//處理進製
len++
;//虛擬進製
c[len]
=c[len-1]
/10; c[len-1]
%=10;
while
(!c[len]
)len--
;//高位無需進製
for(
int i=len;i>=
1;i--
)printf
("%d"
,c[i]);
return0;
}
// 除法
#include
#include
#include
#define max 100010
char sa[max]
,sb[max]
;int a[max]
,b[max]
,c[max]
,d[max]
,flag,len,lena,lenb;
intcompare()
else
if(d[l]
==b[l]
)else
}return flag;
}void
jianfa()
d[i]
-=b[i];}
}void
cheng()
}int
main()
cheng()
;}while
(len>1&&
!c[len]
) len--
;for
(int i=len;i>=
1;i--
)printf
("%d"
,c[i]);
return0;
}
高精度運算模板(大數加減乘除模板)
1.高精度加法模板 計算a b,a與b長度均 1e6 include include using namespace std vector add vector a vector b if t c push back t returnc int main 2.高精度減法模板 計算a b,長度均小於1...
大數(高精度)加減乘除取模運算
千辛萬苦找到了大數 高精度 加減乘除取模運算的演算法,有的地方還需要再消化消化,先貼出來 include include using namespace std inline int compare string str1,string str2 高精度加法 string add int strin...
大數高精度加減乘除模板
大數高精度加減乘除的模板 include include using namespace std inline int compare string str1,string str2 高精度加法 string add int string str1,string str2 else else els...