Моя математическая формула:
В этом случае 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
@AngelKoh только что сделал =]
Вы слышали о целочисленном переполнении?
Не могу изменить свой закрытый голос сейчас, но это обман: stackoverflow.com/q/2641285/2988730
@MadPhysicist, не похоже на переполнение.




Коды 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)
так какой у вас вопрос по Java? это не работает в соответствии с вашими требованиями? если ваш код работает некорректно, вы можете добавить ожидаемые результаты к фактическим результатам.