Cod sursa(job #248521)

Utilizator Andrei200Andrei200 Andrei200 Data 25 ianuarie 2009 23:04:33
Problema Patrate2 Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <stdio.h>   
#include <string.h>
  
#define Lmax 1024   
#define BASE 10
 
  
  

int n;   
int sol[Lmax],sol1[Lmax],C[Lmax]; 
char s[Lmax];   


void citire()  
{   
    freopen("patrate2.in","t",stdin);   
    scanf("%d\n", &n);   
}   
  
  
  
void init(int H[], int X)  
{   
  H[0]=0;   
    while(X)    
     {   
      ++H[0];      
      H[H[0]]=X%BASE;      
      X/=BASE;      
     }      
}   
  
  
void mul2(int A[])   
{   
    int i, t=0;   
  
    for (i=1;i<=A[0] || t;++i,t/=BASE)   
        A[i]=(t+=2*A[i])%BASE;   
    A[0]=i-1;   
}   
  
void mul(int A[], int B[])   
{   
          int i, j;   
          int  t;   
           memset(C, 0, sizeof(C));   
         for (i = 1; i <= A[0]; i++)   
           {   
                 for (t=0, j=1; j <= B[0] || t; j++, t/=BASE)   
                     C[i+j-1]=(t+=C[i+j-1]+A[i]*B[j])%BASE;   
              if (i + j - 2 > C[0]) C[0] = i + j - 2;   
         }   
       memcpy(A, C, sizeof(C));   
}     


  
void scrie(int A[])  
{   
    int i;   
       
    freopen("patrate2.out", "w", stdout);   
    printf("%d", A[A[0]]);   
    for (i=A[0]-1;i>=1;--i)   
        printf("%d",A[i]);   
    printf("\n");   
}   
  
  
void solve()   
{   
    int i;   
    init(sol1,n);
    sol[0]=sol[1]=1;   
    for (i=1;i<=n*n;++i)   
        mul2(sol);
    mul(sol,sol1);  
    scrie(sol);
}   
  
int main()   
{   
  
    citire();   
    solve();  
    return 0;   
}