Pagini recente » Cod sursa (job #2868495) | Cod sursa (job #2834752) | Cod sursa (job #1698779) | Cod sursa (job #1944247) | Cod sursa (job #709693)
Cod sursa(job #709693)
#include <cstdio>
#include <algorithm>
#include <cstring>
#define NMax 2005
using namespace std;
int ND[10], N[2][NMax];
inline void Multiply (int A[], int B[])
{
int i, j, T, C[NMax];
memset (C, 0, sizeof (C));
for (i=1; i<=A[0]; ++i)
{
for (j=1, T=0; j<=B[0] or 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));
}
inline int Compare (int A[], int B[])
{
if (A[0]<B[0]) return 0;
if (A[0]>B[0]) return 1;
for (int i=1; i<=A[0]; ++i)
{
if (A[i]<B[i]) return 0;
if (A[i]>B[i]) return 1;
}
return 0;
}
void Solve ()
{
for (int i=9; i>0; --i)
{
for (; ND[i]>0; --ND[i])
{
int Index=Compare (N[0], N[1]);
N[Index][++N[Index][0]]=i;
}
}
reverse (N[0]+1, N[0]+N[0][0]+1);
reverse (N[1]+1, N[1]+N[1][0]+1);
Multiply (N[0], N[1]);
}
void Read ()
{
freopen ("prod.in", "r", stdin);
for (int i=1; i<10; ++i) scanf ("%d", &ND[i]);
}
void Print ()
{
freopen ("prod.out", "w", stdout);
for (int i=N[0][0]; i>0; --i) printf ("%d", N[0][i]);
}
int main ()
{
Read ();
Solve ();
Print ();
return 0;
}