Pagini recente » Cod sursa (job #1396793) | Rating Botos David (BotosDavid) | Cod sursa (job #1822722) | Cod sursa (job #1089468) | Cod sursa (job #1309228)
#include <bits/stdc++.h>
using namespace std;
int Fact[10013],Doi[10013],n;
ifstream in("patrate2.in");
ofstream out("patrate2.out");
void multiply(int A[],int B[])
{
int i,j;
int c[10013];
memset(c,0,sizeof c);
for (i=1;i<=A[0];++i)
{
int rest=0;
for (j=1;j<=B[0] || rest; ++j, rest/=10)
c[i+j-1]=(rest+=c[i+j-1]+A[i]*B[j])%10;
c[0]=max(c[0],i+j-2);
}
memcpy(A,c,sizeof c);
}
void power(int A[], int exp)
{
int aux[10013];
aux[++aux[0]]=1;
while(exp)
{
if (exp%2==0)
{
multiply(A,A);
exp/=2;
}
else
if (exp%2==1)
{
multiply(aux,A);
--exp;
}
}
memcpy(A,aux,sizeof aux);
}
void factorial(int A[],int n)
{
int aux,M[10013];
for (int i=1;i<=n;++i)
{
aux=i;
while(aux)
{
M[++M[0]]=aux%10;
aux/=10;
}
multiply(A,M);
memset(M,0,sizeof M);
}
}
int main(void)
{
ifstream in("patrate2.in");
ofstream out("patrate2.out");
in>>n;
Doi[++Doi[0]]=2;
Fact[++Fact[0]]=1;
power(Doi,n*n);
factorial(Fact,n);
multiply(Fact,Doi);
for (int i=Fact[0];i>=1;--i) out<<Fact[i];
return 0;
}