在 Java 中求解 ln(N!) 的算法

Solving algorithm in Java for ln(N!)

我需要计算 ln(n!)

import java.util.Scanner;

public class App {
    public void fact() {
        System.out.println("Enter The integer");
        Scanner ns = new Scanner(System.in);

        int n = ns.nextInt();
if (n == 0) {
            System.out.println("Factorial is " + 1);
System.out.println("Log OF 0 is Undefined!! ");
}
if(n!=0) {
        double a=1;
        for(     int z=1; z<=n;z++) {
            a*=z;

        }
        System.out.println("Fact is"+a);



System.out.println("Log of ln(N!) is "+ Math.log(a));
}
    }


    public static void main(String[] args) {
        App ap = new App();
        ap.fact();

    }
}

我不知道 Maths.log 函数到底有什么问题。我做得对吗?它没有给我一个合适的答案。

我怀疑你在这里遇到了integer overflow

注意n!增长非常快,对于任何 n > 12,你会得到一个不能装进整数的数字,你可能应该想一个聪明的方法来不完全计算 n!并且仍然得到正确的结果。

下面提示:

log(a*b) = log(a) + log(b)

你的任务是斯特林近似的题目:http://en.wikipedia.org/wiki/Stirling%27s_approximation