Cod sursa(job #498812)

Utilizator grigoroviciGrigorovici Andreea Simona grigorovici Data 6 noiembrie 2010 10:14:38
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<fstream.h>
ifstream fin("prod.in");
ofstream fout("prod.out");
int j,x[1000],v[10],i,n,a[1000],b[1000],k,c[1000],t;
int compara(int a[], int b[])
{
	if(a[0]<b[0])
		return 1;
	else
		if(a[0]>b[0])
			return 0;
		for(j=1;j<=a[0];j++)
			if(a[j]>b[j])
				return 0;
			if(a[j]<b[j])
				return 1;
	return 1;
}

void invers(int a[])
{
	int u,v,aux;
	u=1;v=a[0];
	while(u<=v)
	{
		aux=a[u];
		a[u]=a[v];
		a[v]=aux;
		u++;
		v--;
	}
}
void prod(int a[], int b[], int c[])
{
	for(i=1;i<=a[0];i++)
		for(j=1;j<=b[0];j++)
			c[i+j-1]=c[i+j-1]+a[i]*b[j];
	t=0;
	k=a[0]+b[0]+1;
	for(i=1;i<=k;i++)
	{
		c[i]=c[i]+t;
		t=c[i]/10;
		c[i]=c[i]%10;
	}
	while(t>0)
	{
		k++;
		c[k]=t%10;
		t=t/10;
	}
	c[0]=k;
}

int main()
{
	for(i=1;i<=9;i++)
		fin>>v[i];
	n=0;
	for(i=9;i>0;i--)
	{
		j=1;
		while(j<=v[i])
		{
			x[n++]=i;
			j++;
		}
	}
	for(i=0;i<n;i++)
	{
		if(compara(a,b)==1)//if a<=b returneza 1; 
		{
			a[0]++;
			a[a[0]]=x[i];
		}
		else
		{
			b[0]++;
			b[b[0]]=x[i];
		}
	}
	invers(a);
	invers(b);
	prod(a,b,c);
	for(i=c[0]-1;i>0;i--)
		fout<<c[i];
	fin.close();
	fout.close();
	return 0;
}