Как рассчитать большой 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;
    }
 }

однако это, казалось, не имело никакого значения

Ответы на вопрос(2)

Ваш ответ на вопрос