0

我正在尝试计算欧拉数。作为欧拉数e = 1 + (1/1!) + (1/2!) + (1/3!) + ..... = 2.718281828.... ,其中 n! 等于 n 的阶乘。首先我写了一个类Factorial.class来计算阶乘:

文件Factorial.java

public class Factorial
{
//Methods
//If statement to abolish negative integer parameter have to be filled
     public static int factorial(int number)
     {
          if (number == 0 || number == 1)
          {
               return 1;
          } else
          {
               int m = number;
               for (int i = number - 1; i > 1; i--)
               {
                    m = m * i;
               }
               return m;
          }
     }
}

这个类与测试类一起工作得很好FactorialTest.class

文件FactorialTest.java

public class FactorialTest
{
     public static void main(String[] args)
     {
          System.out.println(Factorial.factorial(10));
     }
}

这个类打印 3628800

后来我创建了一个EulersNumber.class打印e的值:

文件EulersNumber.java

public class EulersNumber
{
     public static void main(String[] args)
     {
          double e = 1;
          for (int i = 1; i > 10000; i++)
          {
               double j = (double)(Factorial.factorial(i));
               double k = 1 / j;
               e = e + k;
          }
          System.out.println("e = " + e); //e = 1.0
     }
}

e 的值应该是 2.718281828.... 但是这个类打印 e = 1.0

我在哪里做错了?

4

3 回答 3

4
for (int i = 1; i > 10000; i++)

上面一行有问题。循环仅执行 if i > 10000。但从i1 开始。所以它永远不会执行。

顺便说一句,您将无法int用来表示 的阶乘10000,这是一个非常大的数字,远远超出了 int 的限制(即2^32 - 1)。请改用 BigInteger。

于 2013-05-18T08:55:50.223 回答
3

循环仅在以下情况下执行i > 10000.

代替

for (int i = 1; i > 10000; i++)

for (int i = 1; i< 10000; i++)  
于 2013-05-18T08:55:51.227 回答
2

在for循环中,条件为>且必须为<

代码:

for(int i = 0;i < 10000 ; i++)

为什么不使阶乘方法递归?

public static int factorial(int number)
 {
      if (number < 2)
      {
           return 1;
      } else
      {
           return number * factorial(number-1);
      }
 }
于 2013-05-18T08:57:22.157 回答