Cod sursa(job #21302)

Utilizator TabaraTabara Mihai Tabara Data 23 februarie 2007 11:38:28
Problema Patrate2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <fstream>
#include <mem.h>
using namespace std;

#define in "patrate2.in"
#define out "patrate2.out"
#define NMAX 101

int a[5001], b[5001];
int n;

void Prod( int a[], int val );
void Prod2( int b[], int val );
void mul(int A[], int B[]);

void Prod( int a[], int val )
{
     int i, t = 0;
     for ( i = 1; i <= a[0] || t; i++, t /= 10 )
     {
         a[i] = ( t += a[i] * val ) % 10;
     }
     a[0] = i - 1;
}

void Prod2( int b[], int val )
{
    int i, t = 0;
    for ( i = 1; i <= b[0] || t; i++, t /= 10 )
    {
        b[i] = ( t += b[i] * val ) % 10;
    }
    b[0] = i - 1;
}       

void mul(int A[], int B[])  
{  
          int i, j, t, C[10001];  
          memset(C, 0, sizeof(C));  
          for (i = 1; i <= A[0]; i++)  
          {  
                  for (t=0, j=1; j <= B[0] || t; j++, t/=10)  
                          C[i+j-1]=(t+=C[i+j-1]+A[i]*B[j])%10;  
                  if (i + j - 2 > C[0]) C[0] = i + j - 2;  
         }  
         memcpy(A, C, sizeof(C));  
}   
           
int main()
{
    freopen ( in, "r", stdin );
    freopen ( out, "w", stdout );
    int i;
    scanf( "%d", &n );
    a[0] = 1;
    a[1] = 2;
    
    for ( i = 1; i <= n*n-1; ++i )
    {
        Prod( a, 2 );
    }
    
    b[0] = 1;
    b[1] = 1;
    for ( i = 1; i <= n; ++i )
    {
        Prod2( b, i );
    }    
    mul( a, b ); 
    /*for ( i = b[0]; i >= 1; --i )
        printf( "%d", b[i] );
    printf( "\n" );
    */
    for ( i = a[0]; i >=  1; --i )
        printf( "%d", a[i] );
           
    return 0;
}