Pagini recente » Cod sursa (job #1646385) | Cod sursa (job #2148755) | Cod sursa (job #450173) | Cod sursa (job #783413) | Cod sursa (job #1037625)
#include<fstream>
#include <string.h>
#define NR_CIFRE 1501
using namespace std;
int v[10],Result_Prod[2][1500],No1_len=0,No2_len=0,DOIT=0;
void mul(int A[], int B[])
{
int i, j, t, C[NR_CIFRE];
memset(C, 0, sizeof(C));
for (i = No1_len; i >= 1; i--)
{
for (t=0, j=No2_len; j >= 1 || t; j--, t/=10)
C[i+j]=(t+=C[i+j]+A[i]*B[j])%10;
if (No1_len -i+ No2_len- j-1 > C[0]) C[0] = i+No2_len - j-1;
}
memcpy(A, C, sizeof(C));
}
int MakeNo(int s)
{
int i,j=9,Alternate=1;
for(i=1;i<=s;i++)
{
while(v[j]==0)
j--;
v[j]--;
if(i==s&&DOIT)
Alternate=(Alternate==1)?(0):(1);
if(i==s-1&&!DOIT)
Alternate=(Alternate==1)?(0):(1);
if(Alternate)
{
No1_len++;
Result_Prod[0][No1_len]=j;
Alternate=0;
}
else
{
No2_len++;
Result_Prod[1][No2_len]=j;
Alternate=1;
}
}
mul(Result_Prod[0],Result_Prod[1]);
}
int main(void)
{
int i,s=0,First=0;
ifstream f("prod.in");
ofstream g("prod.out");
for(i=1;i<=9;i++)
{
f>>v[i];
s+=v[i];
}
if(s%2==1)
DOIT=1;
MakeNo(s);
i=0;
for(i=1;i<=s;i++)
if(Result_Prod[0][i]!=0||First)
{
g<<Result_Prod[0][i];
First=1;
}
}