Я пытаюсь отменить факториалы в Java

Я пытаюсь рассчитать количество rCombination для проекта для школы, и я не могу заставить свой метод вернуть правильные значения.

Я поговорил со своим профессором, и он рекомендовал отменить общие факторы в факториалах. Такой, что

35!/32! = 35*34*33.

Это то, что я до сих пор.

public static long rCombinations(int n, int r) {

   int q = n-r;
   long x = 1;
   for(int i = r; i <= r; i ++)
   {
       x = n*(n-i);
   }
   return x/factorial(r);
}

2 ответа

Решение

Для n!/ M!, где n >= m

int out = 1;
for(int i = n; i <= m; i++)
    out *= i;

Для n!/ M!, где n <= m

double out = 1;
for(int i = n; i <= m; i++)
    out /= i;

В обоих случаях out = n!/ M!

Обратите внимание, что все еще легко переполнить int, 55!/49! слишком большой

Вы можете использовать эту реализацию для вычисления большого факториала чисел без BigInteger следующим образом:

import java.util.Scanner;

public class N_Faktorial {

public static void main(String[] args) {
    int u = 1, A[] = new int[9999999];
    Scanner scan = new Scanner(System.in);
    System.out.print("n=");
    int n = scan.nextInt();
    A[1] = 1;

    for (int i = 1; i <= n; i++) {

        for (int j = 1; j <= n; j++) {
            A[j] *= i;
        }

        for (int j = 1; j <= n; j++) {
            if (A[j] > 9) {
                A[j + 1] += A[j] / 10;
                A[j] %= 10;
            }

            if (A[u + 1] != 0) {
                u++;
            }
        }

    }

    for (int i = u; i >= 1; i--) {

        System.out.print(A[i]);

    }
    //when  n>=24  count of digit of n! is equal to n+1.
    System.out.println("\n Result : " + n + " count of digit " + u);

}

}

После этого вам нужно решение для деления операции. Надеюсь, поможет!.

Другие вопросы по тегам