Pagini recente » Cod sursa (job #2882934) | Cod sursa (job #1984286) | Cod sursa (job #2132659) | Borderou de evaluare (job #996899) | Cod sursa (job #466604)
Cod sursa(job #466604)
#include<fstream>
#define dmax 1003
using namespace std;
ifstream in("prod.in");
ofstream out("prod.out");
short int x[15],p,crt;
short a[1003],b[1003],c[2200];
void go1()
{
while(!x[crt] && crt>0)
crt--;
if(crt>0)
{ a[p]=crt;
x[crt]--;
}
while(!x[crt] && crt>0)
crt--;
if(crt>0)
{ b[p]=crt;
x[crt]--;
}
if(a[p]==b[p] && crt!=0)
{ p++;
go1();
}
}
void getnr()
{ int i,k,c1,c2;
p=1;
crt=9;
go1();
while(crt>0)
{
p++;
while(!x[crt] && crt>0)
crt--;
b[p]=crt;
x[crt]--;
while(!x[crt] && crt>0)
crt--;
a[p]=crt;
x[crt]--;
}
a[0]=p;
b[0]=p;
if(a[a[0]]==0)a[0]--;
if(b[b[0]]==0)b[0]--;
for(i=1;i<=a[0];i++)
c[a[0]-i+1]=a[i];
for(i=1;i<=p;i++)
a[i]=c[i];
for(i=1;i<=b[0];i++)
c[b[0]-i+1]=b[i];
for(i=1;i<=p;i++)
b[i]=c[i];
}
void inmult(short int* a ,short int* b,short int* c)
{ int i,j,q=0;
c[0]=a[0]+b[0]-1;
for(i=1;i<=a[0]+b[0]+2;i++)
c[i]=0;
for(i=1;i<=a[0];i++)
for(j=1;j<=b[0];j++)
c[i+j-1]=c[i+j-1]+a[i]*b[j];
for(i=1;i<=c[0];i++)
{ q=(c[i]+=q)/10;
c[i]=c[i]%10;
}
if(q)
c[++c[0]]=q;
}
int main()
{ int i;
for(i=1;i<=9;i++)
in>>x[i];
in.close();
getnr();
/*for(i=0;i<=a[0];i++)
out<<a[i];
out<<'\n';
for(i=0;i<=b[0];i++)
out<<b[i];
out<<'\n';*/
inmult(b,a,c);
for(i=c[0];i>0;i--)
out<<c[i];
out.close();
return 0;
}