Pagini recente » Cod sursa (job #1453705) | Cod sursa (job #1032147) | Borderou de evaluare (job #2621167) | Cod sursa (job #2754497) | Cod sursa (job #50317)
Cod sursa(job #50317)
#include <stdio.h>
#define fin "patrate2.in"
#define fout "patrate2.out"
#define MAX 10000
int N,f1[MAX],f2[MAX],r[2*MAX];
void write(int X[])
{
for(int i=X[0];i;--i)
printf("%d",X[i]);
printf("\n");
}
void multby(int X[],unsigned 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 = 1;
X[0] = X[1] = 1; /*
do
{
while(i+step<=N*N)
{
multby(X,1llu<<step);
i+=step;
}
step>>=1;
}
while(i<N*N); */
for(int i=1;i<=N*N;++i)
multby(X,2);
}
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;
}