Cod sursa(job #489252)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 1 octombrie 2010 23:50:51
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<cstdio>
#include<algorithm>
using namespace std;

int cif[10],a[1002],b[1002],az[1002],prod[2004];

void citire();
int comp( int A[], int B[]);
void inmulteste(int A[] , int B[] , int C[]);
void scrie();

int main()
{
	freopen ("prod.in" , "r" , stdin);
	freopen ("prod.out" , "w" , stdout);
	
	citire();
	reverse(a+1,a+1+a[0]);
	reverse(b+1,b+1+b[0]);
	inmulteste( a , b , prod);
	scrie();
	
	return 0;
}

void scrie()
{
	int i;
	for ( i = prod[0] ; i >0 ; --i )
		printf( "%ld" , prod[i] );
}

void inmulteste(int A[] , int B[] , int C[])
{
	int i, j, t;
		for (i = 1; i <= A[0]; i++)
		{
			for (t=0, j=1; j <= B[0] || t; j++, t/=10)
				C[i+j-1]=(t+=C[i+j-1]+A[i]*B[j])%10;
				if (i + j - 2 > C[0]) 
					C[0] = i + j - 2;
      }
}



void citire()
{
	int i,j,n=0;
	for ( i = 1 ; i < 10 ; ++i )
		scanf ( "%ld" , &cif[i] );
	for ( i = 9 ; i > 0 ; --i )
		for ( j = cif[i] ; j > 0 ; --j )
			az[++n] = i;
	for ( i = 1 ; i <= n ; ++i )
		if ( comp ( a , b ) <= 0 ) a[++a[0]] = az[i];
			else b[++b[0]] = az[i];
}

int comp( int A[], int B[])
{
	int i;
	if ( A[0] > B[0] ) return 1;
	if ( B[0] > A[0] ) return -1;
	i=1;
	while ( A[i] == B[i] && i <= A[0] ) ++ i;
	if ( i <= A[0] )
	{
		if ( A[i] > B[i] ) return 1;
		if ( B[i] > A[i] ) return -1;
	}
	return 0;
}