Cod sursa(job #397198)

Utilizator GotenAmza Catalin Goten Data 16 februarie 2010 17:14:28
Problema Patrate2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<stdio.h>
void attnr(int h[], int x)
{
	h[0]=0;
	while(x)
	{
	   h[++h[0]]=x%10;
	   x/=10;
	}
 }

void prod(int h[], int g[], int p[])
{
	int i,j,trans=0;
	p[0]=h[0]+g[0];
	for(i=1;i<=h[0]+g[0];i++)p[i]=0;
	for(i=1;i<=h[0];i++)
		for(j=1;j<=g[0];j++)
			p[i+j-1]+=h[i]*g[j];
		for(i=1;i<=p[0];i++)
  {
   p[i]+=trans;
   trans=p[i]/10;
   p[i]%=10;
   }
 if(trans)
  {
   p[0]++;
   p[p[0]]=trans;
   }
 while(p[0]&&!p[p[0]])p[0]--;
 }
void attv(int A[], int B[])
{
	int i;
	A[0]=B[0];
	for(i=1;i<=B[0];i++)
		A[i]=B[i];
}
int main()
{
	int put[5000],v[5000],w[5000],n,nn,i;
	freopen("patrate2.in","r",stdin);
	freopen("patrate2.out","w",stdout);
	scanf("%d",&n);
	attnr(put,2);
	nn=n*n;
	attnr(v,1);
	for(i=0;(1<<i)<=nn;i++)
	{
		if((1<<i)&nn)
		{
			prod(v,put,w);
			attv(v,w);
		}
		prod(put,put,w);
		attv(put,w);
	}
	for(i=2;i<=n;i++)
	{
		attnr(put,i);
		prod(v,put,w);
		attv(v,w);
	}
	for(i=v[0];i;i--)
		printf("%d",v[i]);
	return 0;
}