Pagini recente » Cod sursa (job #1360997) | Cod sursa (job #1584572) | Cod sursa (job #106685) | Cod sursa (job #2477294) | Cod sursa (job #1889524)
#include <fstream>
using namespace std;
ifstream fi("patrate2.in");
ofstream fo("patrate2.out");
int n,i,cn;
int R[10000],X[10000];
void copiaza(int A[],int B[])
{
A[0]=B[0];
for(int i=1; i<=B[0]; i++)
A[i]=B[i];
}
void multvect(int A[],int B[],int C[])
{
int i,j,T=0;
C[0]=A[0]+B[0]-1;
for (i=1; i<=A[0]+B[0];i++)
C[i]=0;
for (i=1; i<=A[0]; i++)
for (j=1; j<=B[0]; j++)
C[i+j-1]+=A[i]*B[j];
for (i=1; i<=C[0]; i++)
{
T=(C[i]+=T)/10;
C[i]%=10;
}
if (T) C[++C[0]]=T;
}
void mult(int A[],int x)
{
int i,p,t=0;
for(i=1;i<=A[0];i++)
{
p=A[i]*x+t;
A[i]=p%10;
t=p/10;
}
while(t)
{
A[++A[0]]=t%10;
t/=10;
}
}
int main()
{
fi>>n;
cn=n*n;
R[0]=1;
R[1]=2;
while(true)
{
if(cn==1)
break;
if(cn%2==0)
{
cn/=2;
multvect(R,R,X);
copiaza(R,X);
}
else
{
cn--;
mult(R,2);
}
}
for(i=1; i<=n; i++)
mult(R,i);
for(i=R[0]; i>=1; i--)
fo<<R[i];
fi.close();
fo.close();
return 0;
}