Здравствуйте, уважаемое сообщество,
Я уже давно думаю об этом, но, похоже, не могу найти решение.
У меня есть int[][] bino = new int[15][]
, в котором я вычисляю первые 15 строк пирамиды паскалей, и мне не разрешено менять тип (без двойной, длинной и т. Д.).
Мы знаем, что факультет 12 - 479001600
Максимальное значение int равно 2147483647, так что fac (12) по-прежнему вписывается в него.
Теперь, для последних 3 строк, это становится сложным.
Fac (13) - 6227020800, что слишком велико для int.
Так что получается, что для строк 13, 14 и 15 это не будет отображать правильные числа
(потому что 6227020800 мод 2147483647 = 1932053506, что означает, что fac (13) = 1932053506 в моем примере).
Вопрос в том, есть ли способ каким-то образом по-прежнему отображать правильные числа без изменения типа поля в int[][] bino = new int[15][]
). Все остальное можно изменить.
public static void main(String args[])
{
int[][] bino = new int[15][]; //Create 2d array for pascal pyramid
for(int i = 0; i < bino.length;i++)
for(int j = 0; j < bino[i].length;j++)
{
binos[i][j] = nOverk(i,j)
}
}
public int nOverk(int n, int k)
{
return(fac(n) / (fac(k) * fac((n-k))));
}
public int fac(int z) //Calculats the faculty of a number
{
int res = 1;
if(z == 0 || z == 1)
return 1;
for(int i = 2; i <= z; i++)
res *= i;
return res;
}