Cod sursa(job #467836)

Utilizator cosmyoPaunel Cosmin cosmyo Data 30 iunie 2010 21:42:45
Problema Patrate2 Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<fstream.h>
long n,p[500],f[500],dp,df,s[500],ds;
void prodc(long x[1000],long dx,long c,long y[1000],long &dy)
{long i,aux,t;
 aux=0;
 t=0;
  for(i=1;i<=dx;i++)
  {aux=x[i]*c+t;
   t=aux/10;
   y[i]=aux%10;
  }
 dy=dx;
 while(t)
{dy++;
 y[dy]=t%10;
 t/=10;
}
}
void suma(long x[500],long dx,long y[500],long dy,long z[500],long &dz)
{long i,t,aux;
 if(dx>dy)
 { for(i=dy+1;i<=dx;++i)
	 y[i]=0;
  dy=dx;
 }
  else
  {for(i=dx+1;i<=dy;++i)
	  x[i]=0;
    dx=dy;
  }
 aux=t=0;
  for(i=1;i<=dx;++i)
  {aux=x[i]+y[i]+t;
   z[i]=aux%10;
   t=aux/10;
  }
 dz=dx; 
 if(t)
 {++dz;
  z[dz]=t;
 }
}
ofstream fout("prod.out");
void prod(long x[500],long dx,long y[500],long dy,long z[500],long &dz)
{long j,z1[500],dz1,k,i;
 for(i=1;i<=dx;++i)
 {prodc(y,dy,x[i],z1,dz1);
  k=i-1;
 

	 for(j=dz1+k;j>=k+1;--j)
		  z1[j]=z1[j-k];
	  for(k=1;k<=i-1;++k)
		  z1[k]=0;
	dz1+=i-1;
	fout<<dz1<<'\n';
	for(j=dz1;j>=1;--j)
		fout<<z1[j]<<" ";
	fout<<'\n';
  suma(z,dz,z1,dz1,z,dz);
 }
}
int main()
{ifstream fin("patrate2.in");
  fin>>n;
 fin.close();
 ofstream fout("patrate2.out");
  long i;
  p[1]=1;
  f[1]=1;
  df=1;
  dp=1;
   for(i=1;i<=n*n;++i)
    prodc(p,dp,2,p,dp);
   for(i=1;i<=n;++i)
   	prodc(f,df,i,f,df);
  prod(p,dp,f,df,s,ds);
   for(i=ds;i>=1;--i)
     fout<<s[i];
  fout.close();
 return 0;
}