Как рассчитать большой nPr в C?
Я написал функцию для вычисления nPr двух чисел в C, не могли бы вы помочь мне адаптировать его для обработки больших чисел?
Мне нужно иметь возможность вычислить значение до 1x10 ^ 12 - я пробовал много разных типов данных и очень застрял!
#include<stdio.h>
#include<math.h>
int main()
{
long int n=49,k=6;
printf("%li nPr %li = %li\n\n",n,k,nPr(n,k));
return 0;
}
long nPr(long int n, long int k);
long nPr(long int n, long int k){
if (n < 0 ){
printf("\nERROR - n is less than 0\n\n");
return -1;
}
if (k > n ){
printf("\nERROR - k is greater than n\n\n");
return -1;
}
else {
long int i,result = 1,c=n+1-k;
for(i=c; i<=n; i++)
{
result = result * i;
}
return result;
}
}
Спасибо
J
ОБНОВИТЬ: Это перестановки без повторения,
также я пытался
long long nPr(long long int n, long long int k);
long long nPr(long long int n, long long int k){
if (n < 0 ){
printf("\nERROR - n is less than 0\n\n");
return -1;
}
if (k > n ){
printf("\nERROR - k is greater than n\n\n");
return -1;
}
else {
long long int i,result = 1,c=n+1-k;
for(i=c; i<=n; i++)
{
result = result * i;
}
return result;
}
}
однако это, казалось, не имело никакого значения