Cod sursa(job #319294)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 31 mai 2009 11:41:21
Problema Patrate2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <cstdio>      
#include <cstring>      
     
#define file_in "patrate2.in"      
#define file_out "patrate2.out"      
     
#define BASE 10      
#define Nmax 10001      
     
int a[Nmax],b[Nmax],sol[Nmax],n;      

void citire()            
{            
    int i,p,l;            
    char s[Nmax];            
           
    scanf("%s", s);            
    l = strlen(s);            
    for (i = 1; i <= l; i++)            
    {            
        ++a[0];            
        //for (j = 8; j >= 0; --j)            
            if (l - i>= 0)            
                a[a[0]] = a[a[0]] * 10 + s[l - i] - '0';           
              
    }  
    n=0;
	i=0;
	while(i<l)
	{
		n=n*10+s[i]-'0';
		i++;
	}
}

inline void MUL(int A[], int B[], int C[])         
{         
    int i, j, t;         
        
    //memset(C, 0, sizeof(C));         
    for (i = 1; i <= A[0]; ++i)         
    {         
        t = 0;         
        for (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 mul(int A[], int b)   
{   
    int i, t;   
  
    for (i = 1, t = 0; i <= A[0] || t; ++i, t /= BASE)   
        A[i] = (t += b * A[i]) % BASE;   
    A[0] = i - 1;   
}   

void scrie(int a[])         
{         
    int i;         
        
    //printf("%d", a[a[0]]);         
    for (i = a[0]; i >= 1; --i)         
        printf("%d", a[i]);         
    printf("\n");         
}     

int main()      
{      
	int i;
    freopen(file_in,"r",stdin);      
    freopen(file_out,"w",stdout);      
          
    citire();      
    sol[0] = sol[1] = 1;   
    for (i = 1; i <= n*n; ++i)   
        mul(sol,2); 
    MUL(a,sol,b);
	scrie(b);
	//printf("%d", n);
	
	fclose(stdin);      
    fclose(stdout);      
          
    return 0;      
}