Cod sursa(job #324018)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 14 iunie 2009 12:46:00
Problema Patrate2 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<stdio.h>
#include<string.h>
 
int a[10000000],i,j,n,b[10000000];

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

 void mulm(int A[], int B[])  
 {  
       int i, j, t, C[100000];  
       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("patrate2.in","r",stdin);
  freopen("patrate2.out","w",stdout);
  
  scanf("%d",&n);
  if(n==1) { printf("2\n");
             fclose(stdin);
             fclose(stdout);
             return 0;
           } 
  a[0]=1;
  a[1]=1;
  b[0]=1;
  b[1]=1;
  
  
  for(i=1;i<=n*(n-1);i++) { if(i<=n)  mul(a,i); 
                            mul(b,2);
                            if(i==n) mulm(a,b);
                          }
  mulm(a,b);                            
  
  for(i=a[0];i>=1;--i) printf("%d",a[i]);
  printf("\n");
  
  fclose(stdin);
  fclose(stdout);
  return 0;
}