Pagini recente » Cod sursa (job #2225255) | Cod sursa (job #1286990) | Cod sursa (job #3238189) | Cod sursa (job #847543) | Cod sursa (job #2006715)
#include <bits/stdc++.h>
int fr[10];
std::vector <int> a, b;
inline bool cmp() {
if(a.size() > b.size())
return 0;
if(a.size() < b.size())
return 1;
int i = a.size() - 1;
while(i >= 0 && a[i] == b[i])
i--;
if(i == -1)
return 1;
return a[i] < b[i];
}
inline std::vector <int> multiply(std::vector <int> a, std::vector <int> b) {
std::vector <int> c;
for(int i = 0; i < a.size(); i++) {
int t = 0;
for(int j = 0; j < b.size() || t > 0; j++) {
if(c.size() <= i + j)
c.push_back(0);
if(j < b.size())
t += a[i] * b[j] + c[i + j];
else
t += c[i + j];
c[i + j] = t % 10;
t /= 10;
}
}
if(c.empty())
c.push_back(0);
return c;
}
int main() {
FILE *fi, *fout;
int i;
fi = fopen("prod.in" ,"r");
fout = fopen("prod.out" ,"w");
for(i = 1; i < 10; i++)
fscanf(fi,"%d " ,&fr[i]);
for(i = 9; i > 0; i--) {
while(fr[i] > 0) {
fr[i]--;
if(cmp() == 1)
a.push_back(i);
else
b.push_back(i);
fr[i]--;
}
}
for(i = 0; i < a.size() - i - 1; i++)
std::swap(a[i], a[a.size() - i - 1]);
for(i = 0; i < b.size() - i - 1; i++)
std::swap(b[i], b[b.size() - i - 1]);
a = multiply(a, b);
for(i = a.size() - 1; i >= 0; i--)
fprintf(fout,"%d" ,a[i]);
fclose(fi);
fclose(fout);
return 0;
}