阶乘程序的输出

Output of Factorial program

我正在编写一个程序,它应该输出用户输入的任何数字的阶乘。该程序正确地给出了从 0 到 12 的输出,但如果我输入 13,输出是 1932053504,但在我的计算器中,是 13! = 6227020800。

也在32!和 33!,输出为负 (32!= -2147483648)。从 34! 开始,输出为零 (0)。

我该如何解决这个问题?我希望程序能够正确输出用户输入的任何数字。

import java.util.Scanner;
import java.io.*;
    public class one {

        public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Enter number: ");
        int val = in.nextInt();
        int factorial = 1;

        for (int i = 1; i <= val; i++) {
            factorial *= i;
        }
        System.out.println("The factorial of " + val + " is " + factorial);
   }
}

它超过了整数可以取的最大值

最大 整数 value:2147483647

最大值:9223372036854775807

最大双倍值:7976931348623157^308

使用没有上限的 long、double 或 BigInteger

 public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Enter number: ");
        int val = in.nextInt();
        int factorial = 1;
        int i = 1;
        while (i <= val) {
            factorial = factorial * i;
            i++;
        }
        System.out.println("The factorial of " + val + " is " + factorial);
    }
}

这就是你使用 while 循环的方式