Математика на Java (комбинаторика)

Моя проблема: Математика на Java (комбинаторика)

Моя математическая формула: Математика на Java (комбинаторика) В этом случае X = N; Y = L; U = K;

    public class Play {

    public static void main(String args[]) {
         //n!(n−k−1)!
        int n = 10;
        int k =2;
        int l = 12;


        long result;
        result = (calculaFator(n) / calculaFator(n-k-1));
        result= (long) (result * Math.pow((n-k),(l-k)-1));
        System.out.println(result);


    }

    public static long calculaFator(long x) {
        long f = x;

        while (x > 1) {

            f = f * (x - 1);

            x--;
        }
        return f;
    }
}

Это должно быть 721599986, но это дает мне 96636764160

У меня есть образцы:

With n=10, k=2, l=12 it should be 721599986

With n=10, k=2, l=16 it should be 626284798

With n=10, k=1, l=20 it should be 674941304

With n=5, k=2, l=8 it should be 10800

так какой у вас вопрос по Java? это не работает в соответствии с вашими требованиями? если ваш код работает некорректно, вы можете добавить ожидаемые результаты к фактическим результатам.

Angel Koh 29.03.2018 07:52

@AngelKoh только что сделал =]

Matheus E. Mordorst 29.03.2018 07:58

Вы слышали о целочисленном переполнении?

Mad Physicist 29.03.2018 08:03

Не могу изменить свой закрытый голос сейчас, но это обман: stackoverflow.com/q/2641285/2988730

Mad Physicist 29.03.2018 08:04

@MadPhysicist, не похоже на переполнение.

Angel Koh 29.03.2018 08:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
80
1

Ответы 1

Коды Java работают в соответствии с указанной вами формулой. Похоже, что формула неверна, а не коды. (или ожидаемые результаты, или ваше сопоставление x, u, y с n, l, k неверно?)

int x = 10;
int u = 2;
int y = 12;
long numerator = calculaFator(x);
long denominator = calculaFator(x - u - 1);

int xu1 = x - u - 1;
long result = numerator / denominator;
System.out.println();
System.out.println(x + "!= numerator: " + numerator);  //10!= numerator: 3_628_800 
System.out.println(xu1 + "!= denominator: " + denominator); //7!= denominator: 5_040 
System.out.println("result1: " + result); //result1: 720 (correct)

int xu = x - u;
int yu1 = y - u - 1;
double remainderPlaylist = Math.pow(xu, yu1);
System.out.println(xu + "^" + yu1 + " = " + remainderPlaylist);//8^9 = 1.34217728E8 
System.out.println(xu + "^" + yu1 + " = " + (long) remainderPlaylist);//8^9 = 134_217_728   (correct)

long mul = (long) (result * remainderPlaylist);
System.out.println(result + "x" + (long)remainderPlaylist + " = " + mul); //720x134_217_728 = 96_636_764_160  (mathematically correct)

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