Pagini recente » Diferente pentru implica-te/arhiva-educationala intre reviziile 10 si 9 | cnrvxa1 | Istoria paginii runda/simulare_oji2011/clasament | Cod sursa (job #2276656) | Cod sursa (job #335655)
Cod sursa(job #335655)
#include<stdio.h>
#define baza 10000
typedef int bignumber[10000];
int n,i;
bignumber fact,d,c;
void copy(bignumber a,bignumber b) {
for(int i=0;i<=b[0];i++) a[i]=b[i];
}
void inmulteste(bignumber &a,int v) {
int t=0,i;
for(i=1;i<=a[0];i++) {
a[i]=a[i]*v+t;
t=a[i]/baza;
a[i]%=baza;
}
if(t) {
a[0]++;
a[a[0]]=t;
}
}
void inmulteste(bignumber a,bignumber b) {
int t;
copy(c,a);
a[0]+=b[0];
int i,j;
for(i=1;i<=a[0];i++) a[i]=0;
for(i=1;i<=b[0];i++) {
t=0;
for(j=1;j<=c[0];j++) {
a[j+i-1]+=(b[i]*c[j]+t)%baza;
t=(b[i]*c[j]+t)/baza;
}
if(t) a[c[0]+i]+=t;
t=0;
for(j=1;j<=a[0];j++) {
a[j]+=t;
t=a[j]/baza;
a[j]%=baza;
}
}
if(!a[a[0]]) a[0]--;
}
int main() {
freopen("patrate2.in","r",stdin);
freopen("patrate2.out","w",stdout);
scanf("%d",&n);
fact[0]=fact[1]=1;
for(i=2;i<=n;i++) inmulteste(fact,i);
d[0]=d[1]=1;
for(i=1;i<=n*n;i++) inmulteste(d,2);
inmulteste(d,fact);
printf("%d",d[d[0]]);
for(i=d[0]-1;i>0;i--) printf("%04d",d[i]);
return 0;
}