Pagini recente » Cod sursa (job #2759217) | Cod sursa (job #472993) | Cod sursa (job #677422) | Cod sursa (job #460261) | Cod sursa (job #467077)
Cod sursa(job #467077)
# include <cstdio>
# include <string>
const char FIN[] = "prod.in", FOU[] = "prod.out";
const int MAX = 2005;
int times[10], A[MAX], B[MAX];
char cifre[MAX >> 1] ;
bool comp ( int A[], int B[] ) {
if(A[0] < B[0]) return true;
if(A[0] > B[0]) return false;
for(int i = A[0]; i; --i) {
if(A[i] < B[i]) return true;
if(A[i] > B[i]) return false;
}
return false;
}
void adauga ( int A[], char X )
{
memcpy ( &A[ 2 ], &A[ 1 ], sizeof ( int ) * A[ 0 ] ) ;
++A[0], A[1] = X ;
}
void mulmare ( int A[], int B[] ) // A <- A * B
{
int i, j, t, C[MAX]; // C <- A * B
memset ( C, 0, sizeof( C ) ) ;
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;
}
memcpy ( A, C, sizeof( C ) ) ; // A <- C
}
void write ( int A[] )
{
for (int i = A[0]; i; --i) {
printf ( "%d", A[i] ) ;
}
}
int main()
{
freopen ( FIN, "r", stdin ) ;
freopen ( FOU, "w", stdout ) ;
int k = 0 ;
for ( int i = 0; i < 9; ++i ) {
scanf ( "%d", ×[i] ) ;
for (int j = 0; j < times[i]; ++j) {
cifre[++k] = i + 1 ;
}
}
for ( int i = k; i ; --i ) {
if ( comp ( A, B ) ) { // decat sa adaug la sfarsit si sa inversez vectorul
adauga ( A, cifre[i] ) ; // mai bine adaug direct la inceput
} else {
adauga ( B, cifre[i] ) ;
}
}
mulmare ( A, B ) ;
write ( A ) ;
return 0;
}