Cod sursa(job #1200287)

Utilizator enedumitruene dumitru enedumitru Data 22 iunie 2014 08:48:00
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("prod.in"); ofstream g("prod.out");
typedef int Mare[2002];
Mare a,b,p;
int comp(Mare x, Mare y)
{   if(x[0]>y[0]) return 1; else if(y[0]>x[0]) return -1;
    for(int i=1;i<=x[0];i++) 
        if(x[i]>y[i]) return 1; else if(y[i]>x[i]) return -1;
    return 0;
}
void prod(Mare A, Mare B, Mare C)
{	int i,j,T=0;
	C[0]=A[0]+B[0]-1;
	for(i=1;i<=A[0]+B[0];i++) 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++) {C[i]+=T; T=C[i]/10; C[i]%=10;}
	if(T) C[++C[0]]=T;
}
int main()
{	int i,f[10];
	for(i=1;i<=9;i++) in>>f[i];
    for(i=9;i>=1;i--)
        while(f[i])
        {	if(comp(a,b)>=0) b[0]++, b[b[0]]=i; else a[0]++, a[a[0]]=i;
			f[i]--;
        }
    reverse(a+1,a+a[0]+1); reverse(b+1,b+b[0]+1);
    prod(a,b,p);
	for(i=p[0];i>=1;i--) g<<p[i];
	g<<'\n'; g.close(); return 0;
}