因子计算

时间:2014-06-04 20:22:01

标签: java

我正在Saylor学院的网页上通过计算机科学学习java编程。我到了学习NetBeans中调试程序的地步,并且有一个程序可以计算并打印n (=1*2*3*...*n)的阶乘。该文中说程序中存在逻辑错误,但没有关于它的位置。我似乎无法弄清楚逻辑错误在哪里。

任何可以提供帮助的人?程序代码:

/** Compute the factorial of n */
public class Factorial {
   // Print factorial of n
   public static void main(String[] args) {
      int n = 20;
      int factorial = 1;

      // n! = 1*2*3...*n
      for (int i = 1; i <= n; i++) {
         factorial *= i;
      }
      System.out.println("The Factorial of " + n + " is " + factorial);
   }
}

4 个答案:

答案 0 :(得分:6)

20!是2,432,902,008,176,640,000(~2 * 10 ^ 18),远远大于可以存储在int中的最大可能数,大约是20亿。此代码将溢出并显示错误的答案。

要做出的更正是将factorial的声明从int更改为long

答案 1 :(得分:2)

20!的值远远大于int类型可以存储的值。

答案 2 :(得分:0)

使用long代替int
可能没有任何语法错误。但是有一些错误是编译器所不知道的。因此,它将此问题移交给OS,OS立即终止程序。通常就是这种情况。通过引入有效的 EXCEPTION HANDLING 来克服这类问题,即逻辑错误,Java变得更加强大。

答案 3 :(得分:0)

正如其他人所指出的,在这种情况下,数据类型是你的限制。

如果您希望计算大数学,您应该使用特别适合代表大数字的自定义数据类型。

如果您想了解这样的实现,我强烈建议您阅读PaŭloEbermann对this StackOverflow question的非常彻底的回答。

如果您对实现的工作方式不感兴趣,但想要执行大整数计算,则可以使用Java的BigInteger数据类型。