Cod sursa(job #466854)

Utilizator bog29Antohi Bogdan bog29 Data 27 iunie 2010 19:09:21
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<fstream>
#define dmax 1003
using namespace std;
ifstream in("prod.in");
ofstream out("prod.out");

short int x[15],p,crt;

short int a[1003],b[1003],c[2200];

void go1()
{	
	while(!x[crt] && crt>0)
		crt--;
	if(crt>0)
	{	a[p]=crt;
		x[crt]--;
	}	
	while(!x[crt] && crt>0)
		crt--;
	if(crt>0)
	{	b[p]=crt;
		x[crt]--;
	}	
	if(a[p]==b[p] && crt!=0)
	{	p++;
		go1();
	}
}	

void getnr()
{	int i,k,c1,c2;
	p=1;
	crt=9;
	
	go1();
	
	
	while(crt>0)
	{	
		p++;
		
		while(!x[crt] && crt>0)
			crt--;
		b[p]=crt;
		x[crt]--;
		
		while(!x[crt] && crt>0)
			crt--;
		a[p]=crt;
		x[crt]--;
		
	}
	a[0]=p;
	b[0]=p;
	if(a[a[0]]==0)a[0]--;
	if(b[b[0]]==0)b[0]--;
	for(i=1;i<=a[0];i++)
		c[a[0]-i+1]=a[i];
	for(i=1;i<=p;i++)
		a[i]=c[i];
	for(i=1;i<=b[0];i++)
		c[b[0]-i+1]=b[i];
	for(i=1;i<=p;i++)
		b[i]=c[i];
}

void inmult(short int* a ,short int* b,short int* c)
{	int i,j,q=0;
	
	c[0]=a[0]+b[0]-1;
	for(i=1;i<=a[0]+b[0]+2;i++)
		c[i]=0;
	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];
	for(i=1;i<=c[0];i++)	
	{	q=(c[i]+=q)/10;
		c[i]=c[i]%10;
	}
	if(q)
		c[++c[0]]=q;	
}	

int main()
{	int i;
	for(i=1;i<=9;i++)
		in>>x[i];
	in.close();
	getnr();
	/*for(i=0;i<=a[0];i++)
		out<<a[i];
	out<<'\n';
	for(i=0;i<=b[0];i++)
		out<<b[i];
	out<<'\n';*/
	inmult(b,a,c);
	for(i=c[0];i>0;i--)
		out<<c[i];
	out.close();
	return 0;
}