如何找到序列中所有数字的阶乘和?

时间:2019-05-21 04:16:02

标签: java bluej

我想创建一个程序来查找序列中直到20的所有数字的阶乘和。 我必须在s = 1 +(1 * 2)+(1 * 2 * 3)+ ...(1 * 2 * 3 ... 20)中找到's'。 我尝试了一个程序,但是没有用。我正在使用BlueJ IDE。

int a =1; 
    int s = 0;
    for(int i = 1; i <= 10; i++)
    {
        while (i >0)
        {

            a = a * i;
            i--;
        }
        s = s+a;
    }
    System.out.println(s);

编译器没有显示任何错误消息,但是当我运行程序时,JVM(Java虚拟机)会继续加载,并且不会显示输出屏幕。

3 个答案:

答案 0 :(得分:0)

您应该在内部循环中使用其他循环变量名称,并且还需要使用long来存储和。实际上,我首先会写一个乘以该系列中一个数字的方法。喜欢,

static long multiplyTo(int n) {
    long r = 1L;
    for (int i = 2; i <= n; i++) {
        r *= i;
    }
    return r;
}

然后,您可以调用该函数并通过一个简单的循环计算总和。喜欢,

long sum = 0L;
for (int i = 1; i <= 20; i++) {
    sum += multiplyTo(i);
}
System.out.println(sum);

我明白了

2561327494111820313

答案 1 :(得分:0)

使用流:

    long s = LongStream.rangeClosed(1, 20)
        .map(upper -> LongStream.rangeClosed(1, upper)
            .reduce(1, (a, b) -> a * b))
        .sum();
    System.out.println(s);

打印2561327494111820313

答案 2 :(得分:0)

您可以尝试以下一种方法:

 public class Main 
 {
 public static void main (String[]args)
 {
  int fact = 1;
  int sum = 0;
  int i, j = 1;
  for (i = 1; i <= 20; i++)
  {
    for (j = 1; j <= i; j++)
    {
      fact = fact * j;
  }
  sum += fact;
  System.out.println ("sum = " + sum);
  fact = 1;
  }
 }
}

始终提供适当的变量名称,并尝试避免在不同的地方使用相同的变量,即您在外部和内部循环中都使用了变量i,这不是一个好习惯。