Cod sursa(job #486565)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 21 septembrie 2010 23:22:11
Problema Prod Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<fstream.h>
#define NMAX 1002

int fr[10], a[NMAX], b[NMAX], c[NMAX+NMAX], i, nc, j, na, nb, T;

void invers1()
{
	int p=1, u=a[0], aux;
	while (p<u)
	{
		aux=a[p];
		a[p]=a[u];
		a[u]=aux;
		++p;--u;
	}
}

void invers2()
{
	int p=1, u=b[0], aux;
	while (p<u)
	{
		aux=b[p];
		b[p]=b[u];
		b[u]=aux;
		++p;--u;
	}
}

void inmultire0()
{
	int i, j, T=0;
	invers1();
	invers2();
	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()
{
	ifstream f("prod.in");
	ofstream g("prod.out");
	
	for(i=1; i<10; ++i) f>>fr[i];
	
	for(i=9; i>0; --i)
		for(j=1; j<=fr[i]; ++j) c[++nc]=i;
	
	a[1]=c[1];a[0]=1;
	b[1]=c[2];b[2]=c[3];b[0]=2;
	c[1]=0;c[2]=0;c[3]=0;
	for (i=4; i<=nc; ++i)
	if (i%2==0) a[++a[0]]=c[i];
	else b[++b[0]]=c[i];
	inmultire0();
	for(i=c[0]; i>0; --i) g<<c[i];
	f.close();
	g.close();
	return 0;
}