Pagini recente » Cod sursa (job #1930877) | Cod sursa (job #2578755) | Cod sursa (job #1037341) | Cod sursa (job #1433735) | Cod sursa (job #2328977)
#include <cstdio>
using namespace std;
int n;
int pn[100000], p;
int n2[100000], n22;
void inmt(int a[100000], int in, int &p)
{
int b[100000]{0};
for(int i=0; i<p; i++)
b[i] = a[i];
int pb = p;
int indice=0;
while(in)
{
int c = in%10;
int inm=0, inma=0;
for(int i=0; i<pb; i++)
{
int v = b[i]*c+inma;
if(v>=10)
{
while(v>=10)
{
v-=10;
inm++;
}
}
if(indice != 0)
{
if(i+indice >= p)
p = i + indice + 1;
a[i+indice] += v;
if(a[i+indice] >= 10)
{
a[i+indice]-=10;
inm++;
}
}
else a[i] = v;
inma = inm;
inm = 0;
}
if(inma != 0)
{
while(inma != 0)
{
p++;
a[p-1] = inma%10;
inma/=10;
}
}
in/=10;
indice++;
}
}
void fact(int n)
{
p = 1;
pn[0] = 1;
for(int i=1; i<=n; i++)
inmt(pn, i, p);
}
void inmm(int a[100000], int iin[100000], int &na, int ni)
{
int b[100000];
for(int i=0; i<na; i++)
b[i] = a[i];
int in[100000];
for(int i=0; i<ni; i++)
in[i] = iin[i];
int pb = na;
int indice=0;
for(int i=0; i<ni; i++)
{
int c = in[i];
int inm=0, inma=0;
for(int i=0; i<pb; i++)
{
int v = b[i]*c+inma;
if(v>=10)
{
while(v>=10)
{
v-=10;
inm++;
}
}
if(indice != 0)
{
if(i+indice >= na)
na = i + indice + 1;
a[i+indice] += v;
if(a[i+indice] >= 10)
{
a[i+indice]-=10;
inm++;
}
}
else a[i] = v;
inma = inm;
inm = 0;
}
if(inma != 0)
{
while(inma != 0)
{
na++;
a[na-1] = inma%10;
inma/=10;
}
}
indice++;
}
}
void putere(int p)
{
n22=1;
n2[0] = 1;
int p2[100000];
int c=1;
p2[0] = 2;
while(p > 0)
{
if(p%2 == 1)
{
p--;
inmm(n2, p2, n22, c);
}
inmm(p2, p2, c, c);
p/=2;
}
}
int main()
{
freopen("patrate2.in", "r", stdin);
freopen("patrate2.out", "w", stdout);
scanf("%d", &n);
fact(n);
n*=n;
putere(n);
inmm(pn, n2, p, n22);
for(int i=p-1; i>=0; i--)
printf("%d", pn[i]);
return 0;
}