Cod sursa(job #498796)

Utilizator ionut_ungureanuUngureanu Vladut Ionut ionut_ungureanu Data 6 noiembrie 2010 09:54:02
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
int n,a[1005],b[1005],p[1005],i,j,ii,f[10],v[1005];
int comparare(int a[100],int b[100])
{
if(a[0]<b[0])return 1;
if(a[0]>b[0])return 0;
for(ii=1;ii<=a[0];ii++)
{
	if(a[ii]>b[ii])return 0;
	if(b[ii]>a[ii])return 1;
}

return 1;
}

void prod(int a[100],int b[100])
{
int i,j,t,cif;
for(i=1;i<=b[0];i++)
	{
	 for(t=0,j=1;j<=a[0];j++)
		 {
			 cif=p[i+j]+a[j]*b[i]+t;
			 p[i+j]=cif%10;
			 t=cif/10;
		 }
	 if(t)p[i+j]=t;
	}
p[0]=a[0]+b[0];
if(p[0])p[0]++;
}

void inversare(int a[100])
{
int aux;
for(i=1;i<=a[0]/2;i++)
	{
	aux=a[i];
	a[i]=a[a[0]-i+1];
  a[a[0]-i+1]=aux;
	}
}

void write()
{
freopen("prod.out","w",stdout);
for(i=p[0];i>=2;i--)
	printf("%d",p[i]);
}

int main()
{
freopen("prod.in","r",stdin);
for(i=1;i<=9;i++)
	 scanf("%d",&f[i]);
for(i=9;i>=1;i--)
	for(j=1;j<=f[i];j++)
		v[n++]=i;
a[0]=0;
b[0]=0;
for(i=0;i<n;i++)
	 if(comparare(a,b)==1)
		 { 
			 a[0]++;
			 a[a[0]]=v[i];
		 }
	 else b[0]++,b[b[0]]=v[i];
	 
inversare(a);
inversare(b);
prod(a,b);
write();
}