Cod sursa(job #1100361)

Utilizator rughibemBelcineanu Alexandru Ioan rughibem Data 6 februarie 2014 20:30:36
Problema Patrate2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<stdio.h>
#define DIM 10002
FILE *f=fopen("patrate2.in","r"), *g=fopen("patrate2.out","w");

long int n, m, sol[DIM], doi[DIM], nr[DIM], z[DIM];

// n! * 2^(n*n)

void afisare(long int a[]){
long int i;

    for(i=a[0];i>=1;i--) fprintf(g,"%ld",a[i]);
    fprintf(g,"\n");

}

void inmultire( long int x[], long int y[] ){
long int px, py, i, t;

    for(i=0;i<=x[0]+y[0]-1;i++)z[i]=0;

    for( py=1; py <= y[0]; py++ ){
        for( px=1; px<= x[0]; px++ ){
            z[px+py-1]+= (y[py]*x[px]);
        }
    }
    z[0]= x[0]+y[0]-1; t=0;

    for(i=1;i<=z[0];i++){
        z[i]+=t;
        t=z[i]/10;
        z[i]%=10;
    }

    while( t>0 ){
        z[ ++z[0] ]= t%10; t/=10;
    }


}

void daval(long int x[], long int y[]){
long int i;

    for(i=0;i<=y[0];i++) { x[i]=y[i]; }

}

void putere_2(long int exp){

    doi[0]=1; doi[1]=2;
    while( exp > 0 ){

        if( exp%2==1 ) { inmultire( sol, doi ); daval( sol, z); }
        inmultire( doi, doi ); daval( doi, z );
        exp/=2;
    }

}

int main(){

    fscanf(f,"%ld\n",&n); sol[0]=1; sol[1]=1;
    putere_2(n*n);
    for(long int ii=2;ii<=n;ii++){
        nr[0]=1; nr[1]=ii;
        inmultire( sol, nr ); daval( sol, z );

    }
    afisare(sol);

return 0;
}