Pagini recente » Cod sursa (job #23874) | Cod sursa (job #448399) | Cod sursa (job #1487230) | Cod sursa (job #1889700) | Cod sursa (job #466577)
Cod sursa(job #466577)
#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)
swap(A, B);
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;
}