Pagini recente » Cod sursa (job #288011) | Cod sursa (job #307388) | Cod sursa (job #2739474) | Cod sursa (job #655505) | Cod sursa (job #3209209)
#include <iostream>
#include <cstdio>
using namespace std;
typedef int NrMare[100005];
NrMare ans, aux, fact;
void Adunare(NrMare x,NrMare y)
// x = x + y
{
int i,t=0;
if(x[0]<y[0])
x[0]=y[0];
for(i=1;i<=x[0];i++,t/=10)
{
t=x[i]+y[i]+t;
x[i]=t%10;
// echivalent x[i]=(t+=x[i]+y[i])%10
}
if(t)
x[++x[0]]=t;
}
void ProdusMic(NrMare x, int n)
{
int i,t=0;
for(i=1;i<=x[0];i++,t/=10)
{
t+=x[i]*n;
x[i]=t%10;
}
for(;t;t/=10)
x[++x[0]]=t%10;
}
void ProdusMare(NrMare x, NrMare y)
//x = x * y
{
int i,j,t=0;
NrMare z;
//stabilim lungimea rezultatului. S-ar putea modifica
z[0]=x[0]+y[0]-1;
//initializez vectorul z
for(i=1;i<=x[0]+y[0];i++)
z[i]=0;
//calculez produsele intermediare, impreuna cu suma intermediara
for(i=1;i<=x[0];i++)
for(j=1;j<=y[0];j++)
z[i+j-1]+=x[i]*y[j];
//corectez sumele intermediare
for(i=1;i<=z[0];i++)
{
t+=z[i];
z[i]=t%10;
t/=10;
}
if(t)
z[++z[0]]=t;
// pun rezultatul in x
for(i=0;i<=z[0];i++)
x[i]=z[i];
}
void Divide(NrMare x, int n)
//x = x /n, returneaza x%n
{
int i,r=0;
for(i=x[0];i>0;i--)
{
r=10*r+x[i];
x[i]=r/n;
r%=n;
}
for(;x[x[0]]==0 && x[0]>1;)
x[0]--;
}
int main()
{
freopen("patrate2.in", "r", stdin);
freopen("patrate2.out", "w", stdout);
cin.tie(nullptr)->sync_with_stdio(0);
int n;
cin >> n;
ans[0] = ans[1] = 1;
for(int i=1; i<=n*n; i++)
ProdusMic(ans, 2);
for(int i=1; i<=n; i++)
ProdusMic(ans, i);
for(int i=ans[0]; i>=1; i--)
cout << ans[i];
return 0;
}