n階乘,位數,log函式,斯特林公式

2022-06-27 18:33:10 字數 1678 閱讀 7995

一.log函式

標頭檔案:

#include

使用

引入#include

以e為底:log(exp(n))

以10為底:log10(n)

以m為底:log(n)/log(m)

重點:log()與log10()不是相同的函式

double log(double x);  /* 計算乙個數字的自然對數 */

double log10(double x);  /* 計算以10為基數的對數 */

引申:

lg(1*2*3*4*5*...)=lg1+lg2+lg3+lg4+......;

若要計算sum的對數,假如是以10為底,而sum=1*2*3*4*5*...

則可以:lg(1*2*3*4*5*...)=lg1+lg2+lg3+lg4+......;

例題:poj 1423

數學解法:

#include#include

using

namespace

std;

int num[10000001

];int

main()

while(n--)

}

view code

題目大意:求n的階乘的位數,即n!的位數

sum=n!,其位數為log10(sum)+1;

相當於log10(1*2*3*4*5*...)=lg1+lg2+lg3+lg4+.....

double t=0;

for(int i=1;i<=n;i++)     //得到n的階乘y      log10(x)所得的數有些是小數,定義為double

t+=log10((double)i);     //注意這裡的log10(i)裡面的i一定要加乙個強制轉換,與t的資料型別相同,否則會報錯

y=(int)t+1;        

注意小tips:

1.a[i],陣列下標i應為int型,否則會出現compile error

2.y=log10(x),其中y與x的資料型別應相同,否則會出現compile error(錯誤資訊:對過載函式的呼叫不明確)

二.斯特靈

公式斯特靈公式是一條用來取n階乘

近似值的數學

公式。一般來說,當n很大的時候,n階乘的計算量十分大,所以斯特靈公式十分好用。即使在n很小的時候,斯特靈公式的取值也十分準確。

公式:n!約等於sqrt(2*pi*n)*[(n/e)^n]

n越大精確度越高,我們這只需求n!的位數,所以我們可以用該公式

ac**:

#include#include

using

namespace

std;

const

double e=2.7182818284590452354,pi=3.141592653589793239

;double solve(int

n)int

main()

}

view code

Big Number階乘位數計算 斯特林公式

題目大致意思是輸入乙個t,然後接下來t行中輸入n並計算每一行中n的階乘的位數 解題思路 如果此題不是大數的話可以用對數函式性質 log10 1 2 3 4 5.log10 1 log10 2 附上 注意sum是double int main if n 1 sum 1 cout 向上取整函式 retu...

斯特林公式與階乘

想必大家都知道n!很容易爆long long吧,n 23時 unsigned long long 也束手無策。但很多時候我們又要用到n!1 牛客網 題意 求n!在8進製下的位數。思路 我們求乙個10進製數的位數時怎麼求,log10 n 1就是答案。同理,log8 n 1就是此題的解。ac inclu...

A 不凡的夫夫(階乘位數 斯特林公式)

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 夫夫有一天對乙個數有多少位數感興趣,但是他又不想跟凡夫俗子一樣,所以他想知道給乙個整數n,求n!的在8進製下的位數是多少位。第一行是乙個整數t 0示例1 3 425 2...