Pagini recente » Cod sursa (job #2711777) | Cod sursa (job #2780673) | Cod sursa (job #2942970) | Cod sursa (job #2600475) | Cod sursa (job #1612001)
#include<fstream>
#define NRMC 20001 // numarul maxim de cifre
using namespace std;
FILE*in;
ofstream out("patrate2.out");
int N;
int DOI[NRMC];
int FACT[NRMC];
int SOL[NRMC];
void read()
{
in=fopen("patrate2.in", "r");
fscanf(in, "%d", &N);
}
void build_DOI()
{
DOI[0]=1;
DOI[1]=1;
for (int i=1; i<=N*N; i++)
{
int T=0;
for (int j=1; j<=DOI[0]; j++)
{
DOI[j]=DOI[j]*2+T;
T=DOI[j]/10;
DOI[j]=DOI[j]%10;
}
while (T)
{
DOI[0]++;
DOI[DOI[0]]=T%10;
T/=10;
}
}
}
void build_FACT()
{
int mirror_N=N;
while (mirror_N)
{
FACT[0]++;
FACT[FACT[0]]=mirror_N%10;
mirror_N/=10;
}
for (int i=1; i<N; i++)
{
int T=0;
for (int j=1; j<=FACT[0]; j++)
{
FACT[j]=FACT[j]*i+T;
T=FACT[j]/10;
FACT[j]=FACT[j]%10;
}
while (T)
{
FACT[0]++;
FACT[FACT[0]]=T%10;
T/=10;
}
}
}
void build_SOL()
{
SOL[0]=DOI[0]+FACT[0]-1;
for (int i=1; i<=DOI[0]; i++)
for (int j=1; j<=FACT[0]; j++)
SOL[i+j-1]+=(DOI[i]*FACT[j]);
int T=0;
for (int i=1; i<=SOL[0]; i++)
{
SOL[i]+=T;
T=SOL[i]/10;
SOL[i]%=10;
}
if (T)
{
SOL[0]++;
SOL[SOL[0]]=T;
}
}
void solve()
{
build_DOI();
build_FACT();
build_SOL();
}
void show()
{
for (int i=SOL[0]; i>=1; i--)
out<<SOL[i];
}
int main()
{
read();
solve();
show();
return 0;
}