使用for循环的因子程序

问题描述 投票:0回答:2

我是一名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)。有人能指出我正确的方向吗?

java for-loop factorial
2个回答
0
投票

Rahul首先将Int更改为BigInt以解决12之后的数字问题,因为Int max值为2,147,483,647。然后将for循环更改为下方,以便以所需方式打印。

String a = “”;

for(i = 1; i <= num; i++)
    {
        factorial = factorial.multiply(i);

        if(i==1)
              a = String.valueOf(i)
        else
             a = a + "*" + String.valueOf(i)

    }
    System.out.println("!"+num+"="+ a + "="+factorial);

这会将数字打印为1 * 2 * 3 * 5 ......如果你想要反向5 * 4 * 3 ......那么只需将for循环更改为for(i=num;i>=1;i--)


0
投票

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

以上只是一个解释。正如下面的评论所指出的那样,实际上JVM没有减去这个数字,而是溢出了。

© www.soinside.com 2019 - 2024. All rights reserved.