Pagini recente » Cod sursa (job #2000822) | Cod sursa (job #1922795) | Cod sursa (job #99216) | Cod sursa (job #1077757) | Cod sursa (job #2671190)
#include <bits/stdc++.h>
using namespace std;
ifstream f("prod.in");
ofstream g("prod.out");
int cif[10], s;
vector<int> n1, n2, rez;
void Read()
{
for(int i = 1;i <= 9;++i)
f>>cif[i];
}
bool compare()
{
if(n1.size() != n2.size())
return n1.size() < n2.size();
for(int i = 0;i < n1.size();++i)
if(n1[i] != n2[i])
return n1[i] < n2[i];
}
void numbers()
{
int c = 9;
while(true)
{
if(!cif[c])
{
--c;
if(c == 0)
{
reverse(n1.begin(), n1.end());
reverse(n2.begin(), n2.end());
return;
}
continue;
}
if(compare())
n1.push_back(c);
else
n2.push_back(c);
--cif[c];
}
}
void multiply()
{
int t = 0;
s = n1.size() + n2.size();
for(int i = 0;i <= n1.size() + n2.size();++i)
rez.push_back(0);
for(int i = 1;i <= n1.size();++i)
{
for(int j = 1;j <= n2.size();++j)
{
rez[i + j - 1] += n1[i - 1] * n2[j - 1] + t;
t = rez[i + j - 1] / 10;
rez[i + j - 1] %= 10;
}
if(t)
rez[s] =+ t;
t = 0;
}
}
void Solve()
{
numbers();
multiply();
for(int i = s;i >= 1;--i)
g<<rez[i];
}
int main()
{
Read();
Solve();
return 0;
}