Pagini recente » Cod sursa (job #483533) | Cod sursa (job #564397) | Cod sursa (job #566641) | Cod sursa (job #380164) | Cod sursa (job #466711)
Cod sursa(job #466711)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define NRCIFRE 5002
using namespace std;
int nr[10];
int a[5005], b[5005];
int na, nb;
inline void mul (int a[], int b[])
{
int i, j, t, c[NRCIFRE];
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));
}
inline void afis (int a[])
{
for (int i = a[0]; i ; --i)
printf ("%d", a[i]);
printf ("\n");
}
inline int cmp (int na)
{
for (int i = 1; i <= na; ++i)
if (a[i] == b[i]);
else
if (a[i] < b[i]) return 1;
else
if (a[i] > b[i]) return -1;
return 0;
}
void solve ()
{
int i, j;
int c;
int maimare = 0;
for (i = 9; i >= 1; --i)
{
c = i;
for (j = 1; j <= nr[i]; ++j)
{
if (na < nb)
a[++na] = c;
else
if (na > nb)
b[++nb] = c;
else
{
maimare = cmp (na);
if (maimare == 1)
a[++na] = c;
else
b[++nb] = c;
}
}
}
reverse (a + 1, a + na + 1);
reverse (b + 1, b + nb + 1);
a[0] = na;
b[0] = nb;
mul (a, b);
afis (a);
}
int main ()
{
freopen ("prod.in", "r", stdin);
freopen ("prod.out", "w", stdout);
int i;
for (i = 1; i <= 9; ++i)
scanf ("%d ", &nr[i]);
solve ();
return 0;
}