使用for循环的java阶乘程序
我是AP计算机科学专业的学生,我想知道如何使用for循环完成我的阶乘代码。以下是我目前掌握的情况:
import java.util.Scanner;
public class Factorial
{
public static void main(String[] args)
{
int num;
int factorial = 1;
int i;
Scanner input = new Scanner(System.in);
System.out.println("Enter a number: ");
num = input.nextInt();
for(i = 1; i <= num; i++)
{
factorial *= i;
}
System.out.println("!"+num+"="+factorial);
我使用eclipse对它进行了测试,它适用于所有整数,直到(包括)12。当我输入13时,它给了我一个错误的数字。有人能给我解释一下为什么会这样,以及如何纠正它吗
此外,作业要求我需要打印出与答案相乘的数字(即,如果num=5,则输出为5!=5*4*3*2*1=120)。有人能为我指出解决这个问题的正确方向吗
# 1 楼答案
这是因为13的阶乘大于整数的最大值(2147483647)。因此,从大于最大值(4079537153)的假设结果6227020800中减去最大值。再次从最大值中减去该结果,并打印结果1932053504
以上只是一种解释。正如下面的注释所示,实际上JVM不会减去这个数字,而是溢出