Cod sursa(job #498808)

Utilizator tudor_carareTudor Carare tudor_carare Data 6 noiembrie 2010 10:09:21
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<fstream.h>

ifstream fin("prod.in");
ofstream fout("prod.out");


int bla[10],bla2[1001],n,a[1000],b[1000],c[1000];


int compara()//int a[], int b[])
{
	if(a[0]>b[0]) return 1;
	if(a[0]<b[0]) return 0;
	
	for(int i=1;i<=a[0];i++)
	{
		if(a[i]>b[i]) return 1;
		if(a[i]<b[i]) return 0;
	}
	return 1;
}

void invers(int x[])
{
	int u=1,v=x[0],aux;
	while(u<v)
		aux=x[u],x[u++]=x[v],x[v--]=aux;
}

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

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