高精加 高精乘

2021-10-08 19:58:05 字數 1448 閱讀 1290

高精度演算法是每個初學者的入門必備,在我們做題目的時候,總會遇到一下精度太高的問題,即使用了long long也遠遠不夠。所以學習高精度也是很有必要的。本篇文章就以下面這道題為例子,簡單介紹一下高精加和高精乘。

洛谷原題

洛谷部落格題解

本蒟的思路就是高精乘+高精加,就是把高精乘的模板套上去接著套高精加的模板,b=c=i的階乘。

話不多說,直接上**:

#include

#include

using

namespace std;

int n,a[90]

,b[90

],c[90]

,f[90

],d=

0,len_a,len_b=

1,len_c=

1,len_ans,m=1;

string s;

intmain()

for(

int j=

0;j)//計算a*b(i*(i-1)的階乘),即i的階乘,這是模擬豎式乘法

for(

int k=

0;k<=len_b;k++

) c[j+k]

+=a[j]

*b[k]

;for

(int j=

0;j)//需要進製的就進製

if(c[j]

>

9) c[j+1]

+=c[j]/10

,c[j]%=

10;if(c[len_c]

) len_c++

;//看最高位要不要進製

len_ans=len_b,len_b=len_c,m=

max(m,len_c)

;//把len_b賦值給len_ans,修改len_b的值,m為i階乘的長度,看有沒有進製

for(

int k=len_c-

1;k>=

0;k--

) b[k]

=c[k]

;//把c存進b陣列,即存進i的階乘,下次迴圈b為i-1的階乘

len_c=len_a+len_ans;

memset

(c,0

,sizeof

(c))

;//清零c陣列,準備計算下個階乘

for(

int j=

0;jwhile

(!f[m]

&&m>

0) m--

;//去掉首導零

for(

int i=m;i>=

0;i--

) cout<

;//倒序輸出

return0;

//圓滿結束

}

emm 關於高精的事 高精加,高精乘,高精減

emm 這一篇主要是用來記錄所有的高精之類的東西的 高精加的難點就是演算法和倒置和去除前導0。直接上 include include includeint main 好的,就大概是這樣了,高精加的精髓在於演算法,一定要理解!高精減的難度就只有它的演算法是精髓,其他的跟高精乘差不多 include i...

高精乘 大數乘 詳解

高精乘就是兩個比較大的數字相乘,結果超過了基本型別的表示範圍,所以不能直接用普通的資料型別相乘,所以我們要用字串來表示,所以我們來用stl裡的string來表示字串.include using namespace std include define maxlen 100 string sum st...

高精度乘法入門詳解(高精乘高精)

高精度乘法。輸入兩個正整數,求它們的積。類似加法,可以用豎式求乘法。在做乘法運算時,同樣也有進製,同時對每一位進行乘法運算時,必須進行錯位相加,如圖3 圖4。分析c陣列下標的變化規律,可以寫出如下關係式 ci c i c i 由此可見,c i跟a i b j 乘積有關,跟上次的進製有關,還跟原c i...