Cod sursa(job #498994)

Utilizator Ioana_ChirilaIoana Chirila Ioana_Chirila Data 8 noiembrie 2010 09:21:22
Problema Prod Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream.h>
ifstream fin("prod.in");
ofstream fout("prod.out");
int i,j,fr[10],n,a[20],b[20],x[30],c[30],k,t;
int mai_mic_egal(int a[],int b[]);
int invers(int a[]);
void prod( int a[],int b[],int c[]);
int main()
{
	for(i=1;i<10;i++)
		fin>>fr[i];
	n=0;
	for(i=9;i>0;i--)
		for(j=1;j<=fr[i];j++)
			x[n+1]=i;
		
	a[0]=0;
	b[0]=0;
	for(i=0;i<n;i++)
		if(mai_mic_egal(a,b)==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];i>=1;i--)
			fout<<c[i];
		fout<<'\n';
fin.close();
fout.close();
}

int mai_mic_egal(int a[],int b[])
{
	if(a[0]<b[0])
		return 1;
	if(a[0]>b[0])
		return 0;
	for(i=1;i<=a[0];i++)
	{
		if(a[i]>b[i])
			return 0;
		if(a[i]<b[i])
			return 1;
	}
return 1;
}
int 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]=a[i]*b[j]+c[i+j-1];
			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)
			{
				k++;
				c[k]=t%10;
				t/=10;
			}
			c[0]=k;
		}
}