Pagini recente » Cod sursa (job #1616535) | Cod sursa (job #1617338) | Cod sursa (job #529087) | Cod sursa (job #1268809) | Cod sursa (job #489252)
Cod sursa(job #489252)
#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;
}