Pagini recente » Cod sursa (job #1333553) | Cod sursa (job #1844514) | Cod sursa (job #252108) | Cod sursa (job #2284864) | Cod sursa (job #335667)
Cod sursa(job #335667)
#include<stdio.h>
#define baza 10000
typedef int bignumber[10000];
int n,i;
bignumber fact,d,c1,c2;
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(c1,a);
copy(c2,b);
a[0]+=b[0];
int i,j;
for(i=1;i<=a[0];i++) a[i]=0;
for(i=1;i<=c2[0];i++) {
t=0;
for(j=1;j<=c1[0];j++) {
a[j+i-1]+=(c2[i]*c1[j]+t)%baza;
t=(c2[i]*c1[j]+t)/baza;
}
if(t) a[c1[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]--;
}
void pow(int n) {
if(!n) d[0]=d[1]=1;
else
if(n%2) {
pow(n-1);
inmulteste(d,2);
}
else {
pow(n/2);
inmulteste(d,d);
}
}
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;
pow(n*n);
inmulteste(d,fact);
printf("%d",d[d[0]]);
for(i=d[0]-1;i>0;i--) printf("%04d",d[i]);
return 0;
}