Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ln(N!)的Java求解算法_Java_Algorithm_Data Structures - Fatal编程技术网

ln(N!)的Java求解算法

ln(N!)的Java求解算法,java,algorithm,data-structures,Java,Algorithm,Data Structures,我需要计算ln(n!) import java.util.Scanner; 公共类应用程序{ 公开无效事实(){ System.out.println(“输入整数”); 扫描仪ns=新扫描仪(System.in); int n=ns.nextInt(); 如果(n==0){ System.out.println(“阶乘为”+1); System.out.println(“0的日志未定义!!”; } 如果(n!=0){ 双a=1; 对于(intz=1;z我怀疑你在这里遇到了一个问题 请注意,n!增

我需要计算
ln(n!)

import java.util.Scanner;
公共类应用程序{
公开无效事实(){
System.out.println(“输入整数”);
扫描仪ns=新扫描仪(System.in);
int n=ns.nextInt();
如果(n==0){
System.out.println(“阶乘为”+1);
System.out.println(“0的日志未定义!!”;
}
如果(n!=0){
双a=1;

对于(intz=1;z我怀疑你在这里遇到了一个问题

请注意,n!增长非常快,对于任何n>12的值,您将得到一个不能放入整数中的数字,您可能应该想出一种聪明的方法来不完全计算n!并仍然得到正确的结果

以下提示:


对数(a*b)=对数(a)+对数(b)

你的任务是斯特林近似的一个主题:

请描述你的代码到底出了什么问题。你的代码很好,尽管相对较小的
n
值会失败,因为
n!
对于较小的n溢出。@amit Log函数在我通过math.Log传递阶乘时没有给出适当的答案()@Eran我已将变量更改为long&double,但仍然没有锁定正确答案。:@M.UsmanSiddiqui您正在测试
n
的哪些值?@M.UsmanSiddiqui
long
也会很快溢出,double会因为浮点运算问题而导致大值不准确。想办法计算它不需要显式地计算n!就可以完成。如果你想不起来,我的答案中的提示应该真的会有帮助。溢出是否取决于我的ram还是什么?对不起,这是一个离题的问题,但对我的理解仍然有帮助。问候。@M.UsmanSiddiqui否,这取决于在java it中有多少位代表整数
int
为32,而
long
为64。由于
n!
增长非常快,它很快就超出了这些类型的范围。不,它不是,重要的是long的大小,这对Java来说是固定的。谢谢你们这么多人。!@amitcould请将您的电子邮件id发送到我的收件箱中?我想谈谈!拜托。
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();

    }
}