使用for循环的因子程序

时间:2017-12-29 06:21:20

标签: java for-loop factorial

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

2 个答案:

答案 0 :(得分: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--)

答案 1 :(得分:0)

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

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