Pagini recente » Cod sursa (job #2586381) | Cod sursa (job #2569727) | Cod sursa (job #2192042) | Cod sursa (job #2171260) | Cod sursa (job #1037630)
#include<fstream>
#include <string.h>
#define NR_CIFRE 2001
using namespace std;
int v[10],Result_Prod[2][2001],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,LastNo=-1,OnlyOnce=1;
for(i=1;i<=s;i++)
{
while(v[j]==0)
j--;
v[j]--;
if(Alternate)
{
No1_len++;
Result_Prod[0][No1_len]=j;
Alternate=0;
LastNo=j;
}
else
{
No2_len++;
Result_Prod[1][No2_len]=j;
Alternate=1;
if(LastNo>j&&OnlyOnce)
{
OnlyOnce=0;
Alternate=0;
}
}
}
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;
}
}