Pagini recente » Cod sursa (job #3276910) | Cod sursa (job #3242708) | Cod sursa (job #3144284) | Cod sursa (job #2584194) | Cod sursa (job #466581)
Cod sursa(job #466581)
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define MAX_N 1010
#define LIM 2015
int cif[10];
int A[MAX_N], B[MAX_N];
int rez[2 * MAX_N], aux[2 * MAX_N], start = LIM;
int comp() {
if (A[0] > B[0])
return 1;
if (A[0] < B[0])
return 0;
for (int i = 1; i <= A[0]; i++) {
if (A[i] > B[i])
return 1;
if (A[i] < B[i])
return 0;
}
return 0;
}
int main() {
freopen("prod.in", "r", stdin);
freopen("prod.out", "w", stdout);
for (int i = 1; i <= 9; i++)
scanf("%d", &cif[i]);
for (int i = 9; i > 0; i--)
while (cif[i]) {
if (comp())
B[++B[0]] = i;
else
A[++A[0]] = i;
cif[i]--;
}
if (comp() == 0) {
for (int i = 0; i <= A[0]; i++)
aux[i] = A[i];
memset(A, 0, sizeof(A));
for (int i = 0; i <= B[0]; i++)
A[i] = B[i];
memset(B, 0, sizeof(B));
for (int i = 0; i <= aux[0]; i++)
B[i] = aux[i];
memset(aux, 0, sizeof(aux));
}
for (int i = B[0]; i > 0; i--) {
memset(aux, 0, sizeof(aux));
int trans = 0, poz = start;
for (int j = A[0]; j > 0; j--) {
aux[poz] = aux[poz] + A[j] * B[i] + trans;
trans = aux[poz] / 10;
aux[poz] %= 10;
poz--;
}
aux[poz] += trans;
for (int j = start; j >= poz; j--) {
rez[j] = rez[j] + aux[j];
rez[j - 1] += rez[j] / 10;
rez[j] %= 10;
}
start--;
}
for (int i = LIM; i >= 1; i--) {
rez[i - 1] += rez[i] / 10;
rez[i] %= 10;
}
start = 0;
for (int i = 1; i <= LIM; i++)
if (rez[i]) {
start = i;
break;
}
for (int i = start; i <= LIM; i++)
printf("%d", rez[i]);
printf("\n");
return 0;
}