-4
Как вычислить факториал чисел, таких как 300, поскольку выходной сигнал даже не связан с длиной без знака long long? Пожалуйста, помогите.Факториалы больших чисел
#include<stdio.h>
#include<stdlib.h>
unsigned long long int factorial(int number) {
unsigned long long int temp;
if(number <= 1) return 1;
temp = (number * factorial(number - 1));
return temp;
}
int main(){
int t,k,i,a[100001];
unsigned long long int sum[100001];
scanf("%d",&t);
for(i=0;i<t;i++){
scanf("%d",&a[i]);
}
for(k=0;k<t;k++){
sum[k]=0;
for(i=0;i<=a[k];i++){
sum[k] += ((factorial(a[k])/(factorial(i)*factorial(a[k]-i)))%3);
//printf("%d\n",sum[k]);
}}
for(i=0;i<t;i++){
printf("%llu\n",sum[i]);
}
return 0;
}
Я пробовал это, но он останавливался всего на 60 !.
Вы должны использовать большие массивы, [как этот парень сделал] (http://stackoverflow.com/questions/27650119/small-factorial-spoj-code -fctrl2) – user3386109
Вы уверены, что '300!' не переполняет 'unsigned long long int'? –
http://stackoverflow.com/a/17039284/971127 – BLUEPIXY