有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用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) 个答案

  1. # 1 楼答案

    这是因为13的阶乘大于整数的最大值(2147483647)。因此,从大于最大值(4079537153)的假设结果6227020800中减去最大值。再次从最大值中减去该结果,并打印结果1932053504

    以上只是一种解释。正如下面的注释所示,实际上JVM不会减去这个数字,而是溢出