Pagini recente » Cod sursa (job #2230703) | Cod sursa (job #941788) | Cod sursa (job #1595535) | Cod sursa (job #1130537) | Cod sursa (job #466633)
Cod sursa(job #466633)
#include <fstream>
#include <cstring>
using namespace std;
const int MAX_N = 2005;
ifstream fin ("prod.in");
ofstream fout ("prod.out");
int frecv[11], cifre[MAX_N], nr_cifre;
int numar[2][MAX_N];
bool comp(int A[MAX_N], int B[MAX_N]) {
if(A[0] < B[0]) return true;
if(A[0] > B[0]) return false;
for(int i = A[0]; i; --i) {
if(A[i] < B[i]) return true;
if(A[i] > B[i]) return false;
}
return false;
}
void addCifra(int A[MAX_N], int cifra) {
for(int i = A[0]; i; --i)
A[i+1] = A[i];
++A[0];
A[1] = cifra;
}
void inmult(int A[MAX_N], int B[MAX_N]) {
int i, j, t, C[MAX_N];
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));
}
int main() {
for(int i = 1; i < 10; ++i) {
fin >> frecv[i];
for(int j = 1; j <= frecv[i]; ++j) {
cifre[++nr_cifre] = i;
}
}
for(int i = nr_cifre; i; --i) {
if(comp(numar[0], numar[1])) {
addCifra(numar[0], cifre[i]);
} else {
addCifra(numar[1], cifre[i]);
}
}
inmult(numar[0], numar[1]);
for(int i = numar[0][0]; i; --i)
fout << numar[0][i];
}