Pagini recente » Borderou de evaluare (job #2451567) | Borderou de evaluare (job #239938) | Cod sursa (job #3149510) | Borderou de evaluare (job #551337) | Cod sursa (job #2243179)
#include <algorithm>
#include <cstdio>
#include <string.h>
bool myComp(int a[], int b[]) {
if (a[0] > b[0])
return true;
if (a[0] < b[0])
return false;
for (int i = a[0]; i >= 1; i--)
if (a[i] > b[i])
return true;
else if (a[i] < b[i])
return false;
return true;
}
void myPrint(int a[]) {
for (int i = a[0]; i >= 1; i--)
printf("%d", a[i]);
}
void myProd(int a[], int b[]) {
int t = 0, c[2 + 1000];
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 = 1; i <= c[0]; i++) {
c[i] += t;
t = c[i] / 10;
c[i] %= 10;
}
if (t > 0) {
c[0]++;
c[c[0]] = t;
}
memcpy(a, c, sizeof(c));
}
int main() {
freopen("prod.in", "r", stdin);
freopen("prod.out", "w", stdout);
int a[2 + 1000], b[2 + 1000], freq[2 + 9];
for (int i = 1; i <= 9; i++)
scanf("%d", &freq[i]);
a[0] = b[0] = 0;
for (int i = 9; i >= 1; i--) {
for (int j = 1; j <= freq[i]; j++)
if (myComp(a, b)) {
b[0]++;
b[b[0]] = i;
} else {
a[0]++;
a[a[0]] = i;
}
}
std::reverse(a + 1, a + a[0] + 1);
std::reverse(b + 1, b + b[0] + 1);
myProd(a, b);
myPrint(a);
return 0;
}