Cod sursa(job #578813)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 11 aprilie 2011 17:13:51
Problema Patrate2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<stdio.h>
#define N 10000
int x[N],y[N],z[N],q=1,k=1,i,j,n,l=1;
void prod(int x[N],int *l,int k)
{int i,t=0,b[N],m;
for(i=(*l);i>=1;i--,t/=10)
      b[i+2]=(t=t+x[i]*k)%10;
if(t>=10)
      {b[i+2]=t%10;
      t/=10;
      b[i+1]=t%10;
      m=i+1;}
else
      if(t>0&&t<10)
            {b[i+2]=t%10;
            m=i+2;}
      else
            if(t==0)
                  m=i+3;
for(i=m;i<=(*l)+m;i++)
      x[i-m+1]=b[i];
(*l)=(*l)-m+3;}

void produs(int x[N],int *l,int y[N],int k)
{int i,j,t=0,c[N]={0},m;
for(i=(*l);i>=1;i--)
      {for(j=k,t=0;j>=1||t;j--,t/=10)
              c[i+j-1]=(t=t+c[i+j-1]+x[i]*y[j])%10;}
if(c[0]==0)
      m=1;
else
      m=0;
for(i=m;i<k+(*l);i++)
      x[i-m+1]=c[i];
(*l)=(*l)+k-m;}

int main()
{freopen("pat2.in","r",stdin);
freopen("pat2.out","w",stdout);
scanf("%d\n",&n);
x[1]=y[1]=z[1]=1;
for(i=2;i<=n;i++)
      prod(x,&l,i);
for(j=1;j<=n;j++)
      prod(y,&k,2);
for(i=1;i<=n;i++)
      produs(z,&q,y,k);
produs(x,&l,z,q);
for(i=1;i<=l;i++)
      printf("%d",x[i]);
fclose(stdin);
fclose(stdout);
return 0;}