Cod sursa(job #868497)

Utilizator FlameingoAiordachioaei Marius Flameingo Data 31 ianuarie 2013 09:44:20
Problema Patrate2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<cstdio>
#include<cstring>
using namespace std;
int c[20000];
void mul(int*a,int*b)
{
	memset(c,0,80000);
	int i,j,t;
	for(i=1;i<=a[0];++i)
	{
		for(j=1,t=0;j<=b[0]||t;++j,t/=10)
			c[i+j-1]=(t+=a[i]*b[j]+c[i+j-1])%10;
		if(i+j-2>c[0])
			c[0]=i+j-2;
	}
	memcpy(a,c,80000);
}
int main()
{
	freopen("patrate2.in","r",stdin);freopen("patrate2.out","w",stdout);
	int n,i,a[20000]={1,1},b[20000],aux,d[20000]={1,1};
	scanf("%d",&n);
	for(i=2;i<=n;++i)
	{
		aux=i;b[0]=0;
		while(aux)
			++b[0],b[b[0]]=aux%10,aux/=10;
		mul(a,b);
	}
	b[0]=1;b[1]=2;
	n*=n;
	for(;n!=1;n>>=1)
	{
		if(n&1)
			mul(d,b);
		mul(b,b);
	}
	mul(b,d);
	mul(a,b);
	for(i=a[0];i>=1;--i)
		printf("%d",a[i]);
}