#include <stdio.h>
int main()
{
int n, t, rem, i, j, k;
scanf("%d", &t);
int ans[t], integer[1000];
for(i=0; i<t; i++)
{
int count=0;
scanf("%d", &n);
for(j=0; j<1000; j++)
{
integer[j]=0;
}
for(j=0, k=n; k>0; k/=10, j++)
{
integer[j]=k%10;
count++;
}
factorial(n, count, integer);
}
return 0;
}
void factorial(int n, int count, int* integer)
{
int i, j, k, rem=0, temp;
if(n==1)
{
for(i=count-1; i>=0; i--)
{
printf("%d", integer[i]);
}
printf("\n");
return;
}
else
{
for(i=0; i<count; i++)
{
temp=integer[i]*(n-1);
integer[i]=(temp%10)+rem;
rem=temp/10;
if(i==count-1)
{
if(rem!=0)
{
for(j=0, k=rem; k>0; k/=10, j++)
{
integer[count]=k%10;
count++;
}
break;
}
}
}
factorial(n-1, count, integer);
}
}
Объяснение: Я сохраняю числа в обратном порядке, например, на входе: 100 целых чисел, сохраненных в массиве: 0 0 1 0 0 0 0 0 ... тогда при вызове факториальной функции n = 100, count = 3 и целочисленный массив в качестве входных данных. мы умножаем первый элемент массива на n-1 и переносим остаток ... это продолжается до тех пор, пока весь целочисленный массив не умножается на 99, затем мы снова вызываем факториал, умножая массив на 98 и так далее, пока не достигнем 1, где мы в конечном итоге печатаем ответ.
Проблема: код дает правильный результат только до 24 и дает неправильный вывод после этого.