我是一名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)。有人能指出我正确的方向吗?
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--)
这是因为13的阶乘大于整数的MAX_VALUE(2147483647)。结果,从假定结果6227020800中减去MAX_VALUE,该结果大于MAX_VALUE(4079537153)。再次从MAX_VALUE中减去此结果,并打印结果1932053504。
以上只是一个解释。正如下面的评论所指出的那样,实际上JVM没有减去这个数字,而是溢出了。