Pagini recente » Cod sursa (job #2823320) | Cod sursa (job #1284202) | Cod sursa (job #2902052) | Cod sursa (job #1178465) | Cod sursa (job #424920)
Cod sursa(job #424920)
#include<stdio.h>
#define Nmax 5010
#define baza 10000
int doi[Nmax],fact[Nmax],aux[Nmax],n,N,i,Aux;
void copiaza(int a[], int b[])
{
int n=b[0],i;
for(i=0;i<=n;i++)
a[i]=b[i];
}
void inmulteste (int a[], int b[])
{
int i,j,t,c[Nmax],maxelem;
maxelem=a[0]+b[0];
for(i=0;i<Nmax;i++) c[i]=0;
a[a[0]+1]=0;
b[b[0]+1]=0;
for(i=1;i<=a[0];i++)
{
for(j=1,t=0; j<=b[0]||t; j++,t/=baza)
c[i+j-1] = ( t+= c[i+j-1] + a[i]*b[j] ) %baza;
if(i+j-2>c[0]) c[0]=i+j-2;
}
copiaza(a,c);
}
int main()
{
freopen("patrate2.in","r",stdin);
freopen("patrate2.out","w",stdout);
scanf("%d",&n);
doi[0]=1; fact[0]=1; aux[0]=1;
doi[1]=1; fact[1]=1; aux[1]=2;
N=n*n;
while(N)
{
if(N&1)
inmulteste(doi,aux);
inmulteste(aux,aux);
N>>=1;
}
for(i=1;i<=n;i++)
{
Aux=i; aux[0]=0;
while(Aux)
{
aux[++aux[0]]=Aux%baza;
Aux/=baza;
}
inmulteste(fact,aux);
}
inmulteste(fact,doi);
printf("%d",fact[fact[0]]);
for(i=fact[0]-1;i;i--)
printf("%04d",fact[i]);
return 0;
}