Есть задача: Нужно реализовать функцию, которая будет искать число сочетаний из N по M, только с определенными условиями: Функция должна возвращать получающийся результат, если он не превышает 10^9. В противном случае функция должна вернуть -1.
Для вычисления результата внутри функции нужно выполнять последовательное умножение и деление результата на соответствующие значения. Например, число сочетаний из 7 по 3, то есть величину 7! / (3! * 4!), можно посчитать так. Сначала сократим 7! и 4!, получим выражение (5 * 6 * 7) / (1 * 2 * 3). Это выражение можно посчитать, домножив результат, который проинициализирован единицей на 7 и поделив на 1, затем домножив его на 6 и поделив на 2, затем домножив его на 5 и поделив на 3.
Ошибка в том, что неправильно реализовано сравнение с 10^9
public static long Combine(int n,int m) {
if (n==0&&m==0) return 1;
else if (m==0) return 1;
else if (n==m) return 1;
int bol=0;
int men=0;
if (m>=n/2+1) {
bol = m;
men=n-m;
}
else {
bol=n-m;
men=m; //Находим значения, которые будут снизу дроби
}
int[] t = new int[n-bol];
t[n-1-bol]=n;
for (int i=n-2-bol;i>=0;i--) t[i]=t[i+1]-1;//Заполняем массивы значениями сокращенного факториала
int[] b = new int[men];
b[0]=1;
for (int i=1;i<b.length;i++) b[i]=b[i-1]+1;
double k =t[0]/b[0];
for (int i=1;i<b.length;i++){ //Вычисляем К последовательно разделив и умножив
k=k/b[i]*t[i];
if (k>1000000000) return -1;
}
for (int i=b.length;i<t.length;i++) { // где-то тут ошибка в проверке на 10^9
if (t[i]>1000000000/k) return -1;
k*=t[i];
if (t[i]>1000000000/k) return -1;
}
long c = (long) k;
return c;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t=in.nextInt();
long[] a=new long[t];
for (int i=0;i<t;i++){
int n=in.nextInt();
int m=in.nextInt();
a[i]=Combine(n,m);
}
for (int i=0;i<a.length;i++){
if (a[i]!=-1) System.out.println(a[i]);
else System.out.println("Too big!");
}
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
вот библиотекавнизу есть и документация к ней https://bintray
Всем привет Думал, что разобрался в сериализации, но наткнулся на непоняткуСоздаю LinkedList< User >