我正在编写一个程序,该程序应该输出用户输入的任何数字的阶乘。程序正确地给出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);
}
}
答案 0 :(得分:2)
它超过整数可以采用的最大值
最大整数值: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循环代替
的方法