我是一名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)。有人能指出我正确的方向吗?
答案 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没有减去这个数字而是溢出了。