Pagini recente » Cod sursa (job #582517) | Cod sursa (job #3255600) | Cod sursa (job #3289645) | Cod sursa (job #1396291) | Cod sursa (job #2242446)
#include <stdio.h>
#include <string.h>
#include <algorithm>
const int MAX_CIF = 5000;
void mul(int A[], int B[]) {
int t = 0, C[1 + MAX_CIF];
memset(C, 0, sizeof(C));
C[0] = A[0] + B[0] - 1;
for (int i = 1; i <= A[0]; i++)
for (int j = 1; j <= B[0]; j++)
C[i + j - 1] += A[i] * B[j];
for (int i = 0; i <= C[0]; i++) {
t = (C[i] += t) / 10;
C[i] %= 10;
}
if (t > 0)
C[++C[0]] = t;
memcpy(A, C, sizeof(C));
}
bool bigger(int A[], int B[]) {
if (A[0] < B[0]) {
return false;
} else if (A[0] > B[0]) {
return true;
} else {
for (int i = 1; i <= A[0]; i++) {
if (A[i] < B[i])
return false;
else if (A[i] > B[i])
return true;
}
}
return true;
}
void print(int A[]) {
for (int i = A[0]; i > 0; i--)
printf("%d", A[i]);
printf("\n");
}
int main() {
freopen("prod.in", "r", stdin);
freopen("prod.out", "w", stdout);
int freq[10];
for (int i = 1; i <= 9; i++)
scanf("%d", &freq[i]);
int a[1 + MAX_CIF], b[1 + MAX_CIF];
a[0] = 0; b[0] = 0;
for (int i = 9; i > 0; i--)
for (int j = 1; j <= freq[i]; j++) {
if (bigger(a, b))
b[++b[0]] = i;
else
a[++a[0]] = i;
}
std::reverse(a + 1, a + a[0] + 1);
std::reverse(b + 1, b + b[0] + 1);
mul(a, b);
print(a);
fclose(stdin);
fclose(stdout);
return 0;
}