Pagini recente » Cod sursa (job #815411) | Cod sursa (job #422478) | Cod sursa (job #1125407) | Cod sursa (job #2183059) | Cod sursa (job #50443)
Cod sursa(job #50443)
#include <stdio.h>
#define fin "patrate2.in"
#define fout "patrate2.out"
#define MAX 10000
int N,f1[MAX],f2[MAX],r[MAX];
void write(int X[])
{
for(int i=X[0];i;--i)
printf("%d",X[i]);
printf("\n");
}
void multby(int X[],long long sc)
{
int i,t=0;
for(i=1;i<=X[0];++i,t/=10)
X[i] = (t += X[i]*sc) % 10;
while(t) X[++X[0]] = t%10 , t/=10;
}
void toN(int X[])
{
int i=0,step = 16;
X[0] = X[1] = 1;
do
if(i+step<=N*N)
{
long long p = 1<<step;
multby(X,p);
i+=step;
}
else step>>=1;
while(step);
}
void Nfact(int X[],int N)
{
X[0] = X[1] = 1;
for(int i=2;i<=N;++i)
multby(X,i);
}
void mult(int X[],int Y[],int Z[])
{
int i,j,t;
for(i=1;i<=X[0];++i)
{
for(j=1,t=0;j<=Y[0] || t;++j,t/=10)
Z[i+j-1] = (t+=Z[i+j-1]+X[i]*Y[j]) % 10;
if(i+j-2 > Z[0]) Z[0] = i+j-2;
}
}
int main()
{
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%d",&N);
toN(f1);
Nfact(f2,N);
mult(f1,f2,r);
write(r);
fclose(stdin);
fclose(stdout);
return 0;
}