Pagini recente » Cod sursa (job #168742) | Cod sursa (job #1256394) | Cod sursa (job #2326850) | Cod sursa (job #1762622) | Cod sursa (job #177036)
Cod sursa(job #177036)
#include <stdio.h>
long n,i,j,p[3300],f[1000],r;
long l,q,lmax,rez[5000],baza=10000;
void output(long x,long nr0){
if (x==0){printf("0000");return;}
if (rez[i]>x){
for (int j=0;j<nr0;j++)printf("0");
printf("%ld",rez[i]);
}
else output(x/10,nr0+1);
}
int main(){
freopen ("patrate2.in","r",stdin);
freopen ("patrate2.out","w",stdout);
scanf ("%d",&n);
p[1]=1;l=1;
for (i=1;i<=n*n;i++){
r=0;
for (j=1;j<=l;j++){
p[j]=p[j]*2+r;
r=p[j]/baza;
p[j]=p[j]-r*baza;
}
while(r){
l++;
p[l]=r%baza;
r/=baza;
}
}
f[1]=1;q=1;
for (i=2;i<=n;i++){
r=0;
for (j=1;j<=q;j++){
f[j]=f[j]*i+r;
r=f[j]/baza;
f[j]-=r*baza;
}
while (r){
q++;
f[q]=r%baza;
r/=baza;
}
}
for (i=1;i<=l;i++)
for (j=1;j<=q;j++){
rez[i-1+j]+=p[i]*f[j];
}
lmax=l+q-1;
for (i=1;i<=lmax;i++){
if (rez[i]>=baza){rez[i+1]+=rez[i]/baza;rez[i]=rez[i]%baza;}
}
r=rez[lmax+1];
while (r){
lmax++;
rez[lmax]=r%baza;
r/=baza;
}
printf("%ld",rez[lmax]);
for (i=lmax-1;i;i--)
output(baza/10,0);
printf("\n");
return 0;
}