Cod sursa(job #327608)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 29 iunie 2009 16:12:27
Problema Sarpe Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<stdio.h>
#include<string.h>
int n;
int v[4096];

void read()
{
	freopen("sarpe.in","r",stdin);
	freopen("sarpe.out","w",stdout);
	char s[1024];
	gets(s+1);
	n=strlen(s+1);
	int i,aux;
	for(i=1;i<=n;i++)
	{
		aux=s[i]-'0';
		v[i]=s[n-i+1]-'0';
		v[n-i+1]=aux;
	}
}

void mul()
{
	int i,j,t,c[4096];
	memset(c,0,sizeof(c));
	for(i=1;i<=n;i++)
	{
		for(t=0,j=1;j<=n||t;j++,t/=10)
			c[i+j-1]=(t+=c[i+j-1]+v[i]*v[j])%10;
		if(i+j-2>c[0]) 
			c[0]=i+j-2;
	}
	
	t=0;
	for(i=1;i<=c[0];i++)
		c[i]+=(t=(c[i]-=v[i]+t)<0)*10;
	for(;c[0]>1&&!c[c[0]];c[0]--);

    t=0;
	for(i=1;i<=c[0]||t;i++,t/=10)
		c[i]=(t+=c[i]*2)%10;
	c[0]=i-1;
	c[1]+=4;
	for(i=c[0];i>=1;i--)
		printf("%d",c[i]);
}

int main()
{
	read();
	if(n==1 && v[1]==1)
		printf("2\n");
	else
		mul();
	return 0;
}