Pagini recente » Cod sursa (job #1170499) | Cod sursa (job #1161009) | Cod sursa (job #1371895) | Cod sursa (job #1230555) | Cod sursa (job #1799929)
#include <iostream>
#include<fstream>
#include<cmath>
typedef int Huge[100000];
using namespace std;
ifstream f("patrate2.in");
ofstream g("patrate2.out");
int n,i;
Huge A,B,C;
void formare(Huge A,int x)
{
while(x)
{
int u=x%10;
A[0]++;
A[A[0]]=u;
x/=10;
}
}
void inmultire(Huge A,int n)
{
int tr=0,i;
for(i=1; i<=A[0]; i++)
{
A[i]=(A[i]*n+tr);
tr=A[i]/10;
A[i]=A[i]%10;
}
while(tr)
{
A[++A[0]]=tr%10;
tr/=10;
}
}
void ridicare(Huge A,int n)
{
while(n)
{
inmultire(A,2);
n--;
}
}
void fact(int n)
{
formare(B,1);
int k=2;
while(k<=n)
{
inmultire(B,k);
k++;
}
}
void Mult(Huge A, Huge B, Huge C)
/* C <- A x B */
{
int i,j,T=0;
C[0]=A[0]+B[0]-1;
for (i=1; i<=A[0]+B[0];) 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;
}
int main()
{
f>>n;
formare(A,1);
ridicare(A,n*n);
fact(n);
Mult(A,B,C);
//g<<pow(2,n*n)*fact(n);
for(i=C[0];i>=1;i--)
g<<C[i];
}