Pagini recente » Cod sursa (job #520350) | Cod sursa (job #2775054) | Cod sursa (job #360218) | Cod sursa (job #2529717) | Cod sursa (job #2245369)
#include <stdio.h>
#define NMAX 1005
using namespace std;
FILE *fin=fopen("prod.in","r"); FILE *fout=fopen("prod.out","w");
int Cif[10],Sum,j,i,A[NMAX],B[NMAX],Rez[NMAX*NMAX],Total[NMAX*NMAX],ok;
long long int Prod,T;
void adun()
{
int Sum,T,i;
if(Rez[0]<Total[0])
{
for(i=Rez[0]; i<=Total[0]; ++i) Rez[i]=0;
Rez[0]=Total[0];
}
else
{
for(i=Total[0]; i<=Rez[0]; ++i) Total[0]=0;
Total[0]=Rez[0];
}
T=0;
for(i=1; i<=Total[0]; ++i)
{
Sum=Rez[i]+Total[i]+T;
Total[i]=Sum%10;
T=Sum/10;
}
while(T>0) {Total[++Total[0]]=T%10; T/=10;}
for(i=1; i<=Rez[0]; ++i) Rez[i]=0;
}
int main()
{
for(i=1; i<=9; ++i) {fscanf(fin,"%d",&Cif[i]); Sum+=Cif[i];}
if(Sum%2==0)
{
i=9;
A[0]=B[0]=Sum/2;
ok=0;
for(j=A[0]; j>=1; --j,ok=1-ok)
{
if(ok==0)
{
while(Cif[i]==0) --i;
A[j]=i; --Cif[i];
while(Cif[i]==0) --i;
B[j]=i; --Cif[i];
}
else
{
while(Cif[i]==0) --i;
B[j]=i; --Cif[i];
while(Cif[i]==0) --i;
A[j]=i; --Cif[i];
}
}
}
else
{
i=9;
A[0]=Sum/2+1; B[0]=Sum/2;
ok=1;
for(j=A[0]; j>=2; --j,ok=1-ok)
{
if(ok==0)
{
while(Cif[i]==0) --i;
A[j]=i; --Cif[i];
while(Cif[i]==0) --i;
B[j-1]=i; --Cif[i];
}
else
{
while(Cif[i]==0) --i;
B[j-1]=i; --Cif[i];
while(Cif[i]==0) --i;
A[j]=i; --Cif[i];
}
}
while(Cif[i]==0) --i;
A[1]=i;
}
for(i=1; i<=B[0]; ++i)
{
T=0;
for(j=1; j<=A[0]; ++j)
{
Prod=1LL*A[j]*B[i]+T;
Rez[i+j-1]=1LL*Prod%10;
T=Prod/10;
}
Rez[0]=i+A[0]-1;
while(T>0) {Rez[++Rez[0]]=T%10; T/=10;}
adun();
}
for(i=Total[0]; i>=1; --i) fprintf(fout,"%d",Total[i]);
return 0;
}