斯特林公式(Stirling’s approximation)是一條用來取n的階乘的近似值的數學公式。一般來說,當n很大的時候,n階乘的計算量十分大,是以斯特林公式十分好用,而且,即使在n很小的時候,斯特林公式的取值已經十分準确。
公式和公式的證明請移步百科:斯特林公式
對于一個B進制的數,隻需要對其取以B的對數就可以得到他在B進制情況下的位數(取了對數之後可能為小數,是以還需要取整後再+1)
N!的位數就是
[lg(N!)]+1=[lg(1)+lg(2)+…+lg(N)]+1
=(int)ceil[(n*ln(n)-n+0.5*ln(2*n*π))/ln(B)]
/*ceil是向上取整,[]符号為取整*/
例如:
9的階乘等于:362880
它的二進制表示為:1011000100110000000
這個數字共有19位。
請你計算,9999 的階乘的二進制表示一共有多少位?
public static void main(String[] args) {
int sum = ;
int final_= (int) Math.ceil((sum*Math.log(sum)-sum+*Math.log(*sum*Math.PI))/Math.log());
System.out.println(final_);
轉載自:http://www.cnblogs.com/hsqdboke/archive/2012/04/19/2458649.html