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

2022-08-13 22:24:17 字數 518 閱讀 7445

題目大致意思是輸入乙個t,然後接下來t行中輸入n並計算每一行中n的階乘的位數

解題思路:如果此題不是大數的話可以用對數函式性質:log10(1*2*3*4*5...)=log10(1)+log10(2)...

附上**,注意sum是double

int

main()

}if(n==1) sum=1

; cout

/向上取整函式

}

return0;

}

結果就tle了。。。

正解是用斯特林公式:

附上**:

const

double pi=3.141592654

;const

double e=2.71828182846

;int

t,n;

intmain()

return0;

}

斯特林公式更精確方法:

另一種思路的好方法(或許是吧。。。):

大數階乘的位數

問題 c 階乘位數 時間限制 1 sec 記憶體限制 128 mb 提交 狀態 題目描述 在很多軟體中需要用到較大的整數。比如一些軟體將大數用於資料安全傳送的密匙或者密碼編譯等等。在這個問題中,你要根據給你的整數,算出這個數的階乘的位數。輸入含若干行整數。第一行為n,表示案例數,接下來是n行,每行乙...

計算乙個數階乘的位數

給出乙個數n,求出n!的位數。暴力法肯定是不行的,階乘是個增長速度 很快的函式,10!已經有7位了。更直接的方法是log10 n 以10為底n 的對數。因為求位數就是要每次除以10 的,取對數的意義就是10的幾次方才能到n 也就是求了n 有幾位。那麼問題就轉化成求log10 n 了 一種方法是換底公...

HDOJ 1018(階乘位數)

1.log10 num 1 2.較小數情況下,sprintf str,d num 輸出strlen str 所以不能初始化為0 自然對數 log 以二為底log2 num log num log2,因為那個自然對數的底是無理數,不好表示,只要有了自然對數的表示,其他用換底公式就ok啦 我一直想的是求...