Cod sursa(job #807049)
// 2^(n^2) * n!
// calculez 2^(n^2) brut
#include<fstream>
using namespace std;
#define DIMMAX 10010
int n;
int sol[DIMMAX], lgsol;
void read()
{
ifstream fin("patrate2.in");
fin >> n;
fin.close();
}
void inmultireMic(int a[], int &lga, int nr)
{
int i, cifra, t = 0;
//parcurgem si inmultim
for (i=0; i<lga; ++i)
{
cifra = a[i] * nr + t;
t = cifra / 10;
a[i] = cifra % 10;
}
//daca mai avem transport, il adaugam la rezultat
while (t != 0)
{
a[lga++] = t % 10;
t = t / 10;
}
}
void solve()
{
int i;
sol[0] = 1; lgsol = 1;
for (i=1; i<=n*n; ++i)
inmultireMic(sol, lgsol, 2);
for (i=2; i<=n; ++i)
inmultireMic(sol, lgsol, i);
}
void write()
{
int i;
ofstream fout("patrate2.out");
for (i=lgsol-1; i>=0; --i)
fout<<sol[i];
fout<<'\n';
fout.close();
}
int main()
{
read();
solve();
write();
return 0;
}