Pagini recente » Cod sursa (job #1417768) | Cod sursa (job #1301403) | Cod sursa (job #2050883) | Cod sursa (job #300843) | Cod sursa (job #487632)
Cod sursa(job #487632)
#include<fstream>
#include<algorithm>
#define NMAX 1002
using namespace std;
int aux[NMAX], fr[10], a[NMAX], b[NMAX], c[NMAX+NMAX], n;
ifstream f("prod.in");
ofstream g("prod.out");
int comp()
{
int j=1;
if (a[0]<b[0]) return 1;
if (b[0]<a[0]) return 2;
while (a[j]==b[j] && j<a[0]) ++j;
if (a[j]<b[j]) return 1;
else return 2;
}
void construieste()
{
int i, j;
for (i=1; i<10; ++i) f>>fr[i];
for (i=9; i>0; --i)
for (j=0; j<fr[i]; ++j) aux[++n]=i;
for (i=1; i<=n; ++i)
if (comp()==1) a[++a[0]]=aux[i];
else b[++b[0]]=aux[i];
}
void inverseaza()
{
int p=1, u=a[0], aux;
while (p<u)
{
swap(a[p],a[u]);
++p;--u;
}
p=1;u=b[0];
while (p<u)
{
swap(b[p],b[u]);
++p;--u;
}
}
void inmulteste()
{
int i, j, r=0;
c[0]=a[0]+b[0]-1;
for(i=1; i<=a[0]; ++i)
for(j=1; j<=b[0]; ++j)
c[i+j-1]+=a[i]*b[j];
for(i=1; i<=c[0]; ++i)
{
c[i]+=r;
r=c[i]/10;
c[i]%=10;
}
if (r>0) c[++c[0]]=r;
}
void scrie()
{
int i;
for(i=c[0]; i>0; --i) g<<c[i];
g<<"\n";
}
int main()
{
construieste();
inverseaza();
inmulteste();
scrie();
f.close();
g.close();
return 0;
}