#include<stdio.h>
#define MAXN 100
void multiply(int num,int arr[],int *size)
{
for (int i=0;i<*size;i++)
{
arr[i]=arr[i]*num;
}
for (int i=0;i<*size;i++)
{
if (arr[i]>=10)
{
arr[i+1]+=arr[i]/10;
arr[i]=arr[i]%10;
}
}
while(arr[*size-1]>=10)
{
arr[*size]+=arr[*size-1]/10;
arr[*size-1]%=10;
(*size)++;
}
}
void sum (int arr1[],int arr2[])
{
int max_size=0;
for(int i=0;i<=MAXN;i++)
{
if (arr1[i]==0&&arr2[i]==0)
{
max_size=i;
break;
}
}
for (int i=0;i<max_size;i++)
{
arr1[i]+=arr2[i];
}
for (int i=0;i<max_size;i++)
{
if(arr1[i]>=10)
{
arr1[i+1]+=arr1[i]/10;
arr1[i]=arr1[i]%10;
}
}
}
int main ()
{
int n,size=1;
int result[MAXN]={0};
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int temp[MAXN]={1};
for(int m=1;m<=i;m++)
{
multiply(m,temp,&size);
}
sum (result,temp);
}
for(int i=size;i>=0;i--)
{
if(result[i]==0) continue;
printf("%d",result[i]);
}
return 0;
}
`````