Cod sursa(job #321614)

Utilizator Anamaria20Cotirlea Anamaria Anamaria20 Data 6 iunie 2009 18:22:57
Problema Patrate2 Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>

FILE *f,*s;

long long int i,j;
int v1[10001],v2[10001],n;

void inmultire(int x[10001], long long int y)
{
	long long T=0;
	
	for(i=1;i<=x[0];i++)
	{
		x[i]=x[i]*y+T; 
		T=x[i]/10000000; 
		x[i]=x[i]%10000000; 
	}
	
	while (T) 
	{
		x[0]++;
		x[x[0]]=T%10000000;
		T/=10000000;
	}
}

void inmultire2(int x[10001], int y[10001]) 
{
	long long int T=0, R[10001];
	
	R[0]=x[0]+y[0]-1; 
	for(i=1;i<=x[0]+y[0];) R[i++]=0; 
	
	for (i=1;i<=x[0];i++)
		for (j=1;j<=y[0];j++)
			R[i+j-1]+=x[i]*y[j];
	
	for (i=1;i<=R[0];i++)
	{
		R[i]+=T;
		T=R[i]/10000000;
		R[i]%=10000000;
	}
	
	if (T)
	{
		R[0]++; 
		R[R[0]]=T;
	}
	
	x[0] = R[0];
	for(i=1;i<=x[0];i++)
		x[i]=R[i];

}

int main()
{
	f=fopen("patrate2.in","r");
	s=fopen("patrate2.out","w");
	
	fscanf(f,"%d",&n);
	
	v1[0]=1;
	v1[1]=2;
	
	for(j=2;j<=n*n;j++)
		inmultire(v1,2);
	
	v2[0]=1;
	v2[1]=1;
	
	for(j=2;j<=n;j++)
		inmultire(v2,j);
	
	inmultire2(v2,v1);
	
	fprintf(s,"%d",v2[v2[0]]);
	for(j=v2[0]-1;j>0;j--)
		fprintf(s,"%07d",v2[j]);
	
	fclose(s);
	
	return 0;
}