Cod sursa(job #446217)
#include<fstream>
#define LgNr 500
using namespace std;
ifstream fin("patrate2.in");
ofstream fout("patrate2.out");
typedef int Hella[LgNr];
void mult(Hella H, unsigned long X)
{
int i;
unsigned long T=0;
for (i=1;i<=H[0];i++)
{
H[i]=H[i]*X+T;
T=H[i]/10;
H[i]=H[i]%10;
}
while (T)
{
H[++H[0]]=T%10;
T/=10;
}
}
void plusHuge(Hella A, Hella B, Hella C)
{
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()
{
Hella Num1, Num2, Ans;
int i,n;
Num1[0]=1;
Num1[1]=1;
Num2[0]=1;
Num2[1]=1;
fin>>n;
for(i=2;i<=n;i++) mult(Num1, i);
for(i=1;i<=n*n;i++) mult(Num2, 2);
plusHuge(Num1, Num2, Ans);
for(i=Ans[0];i>=1;--i)fout<<Ans[i];
}