Я пытаюсь вычислить факториал очень больших чисел с, как 100 .. путем динамического выделения памяти после вычисления количества цифр в факториале: Мой код:Расчета факториала больших чисел в с использованием массивов
int main()
{
int n,q,i,j,z,t,d;
float p=0.0;
printf("Enter the number whose factorial is to be calculated:\n");
scanf("%d",&n);
//calculating number of digits
for(j=2;j<=n;j++)
p=p+log10(j);
d=(int)p+1;
printf("No of digits in the factorial are:%d\n",d);
int *a;
a=(int *)malloc(d*sizeof(int));//allocation of memory
a[0]=1;
for(i=1;i<n;i++)//initialize array
a[i]=0;
p=0.0;
for(j=2;j<=n;j++)
{
q=0;
p=p+log10(j);
z=(int)p+1;
for(i=0;i<z;i++)
{
t=(a[i]*j)+q;
q=t/10;
a[i]=t%10;
}
}
printf("\n");
for(i=d-1;i>=0;i--)
{
printf("%d",a[i]);
}
return 0;
}
Его предоставление правильных ответов до 40! но не после этого! Что не так с моим решением?
Возможный дубликат [Ограничение времени программы ac при вычислении факториала чисел в c] (http://stackoverflow.com/questi ons/16586842/time-limit-of-ac-program-while-calculate-factorial-of-numbers-in-c) –
@PaulR Я задал вопрос u, имея в виду, и im сомневается в его выполнении, как я тестировал с несколько случаев. – poorvankBhatia
Вместо выделения и очистки (что вы делаете самым медленным способом) выделенной памяти, вы можете сделать это за один шаг с помощью ['calloc'] (http://en.cppreference.com/w/c/ память/calloc). –