Как найти сумму факториала всех чисел в серии? - PullRequest
0 голосов
/ 21 мая 2019

Я хочу создать программу для нахождения суммы факториалов всех чисел в серии до 20. Я должен найти 's' в s = 1 + (1 * 2) + (1 * 2 * 3) +... (1 * 2 * 3 ... 20).Я попробовал программу, но она не работает.Я использую 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 ]

1 голос
/ 21 мая 2019

Вы можете попробовать это:

 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 во внешнем и внутреннем цикле, что не является хорошей привычкой.

0 голосов
/ 21 мая 2019

Использование потоков:

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

Отпечатки 2561327494111820313

0 голосов
/ 21 мая 2019

Вы должны использовать другое имя переменной цикла во внутреннем цикле, и вам также нужно использовать 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
...