Pagini recente » Cod sursa (job #695592) | Cod sursa (job #113909) | Cod sursa (job #1586326) | Cod sursa (job #935131) | Cod sursa (job #466616)
Cod sursa(job #466616)
#include<cstdio>
typedef int Huge[1001];
Huge A,B,C;
int nr,f[11],a[11],b[11];
void prod(Huge Rez,Huge X,Huge Y)
{
for(int i=1;i<=X[0];i++)
for(int j=1;j<=Y[0];j++)
Rez[i+j-1]+=X[i]*Y[j];
Rez[0]=X[0]+Y[0]-1;
int poz=0;
int T=0;
while(++poz<=Rez[0])
{
Rez[poz]+=T;
T=Rez[poz]/10;
Rez[poz]%=10;
}
while(T)
Rez[++Rez[0]]=T%10, T/=10;
}
void afis(Huge A)
{
for(int i=A[0];i>0;i--)
printf("%d",A[i]);
}
int minim(int x,int y)
{
return x<y?x:y;
}
int main()
{
freopen("prod.in","r",stdin);
freopen("prod.out","w",stdout);
for(int i=1;i<10;i++)
scanf("%d",&f[i]), nr+=f[i];
nr/=2;
for(int i=9;i>0 && nr;i--)
{
if(f[i]%2==0)
{
a[i]=minim(f[i]/2,nr);
nr-=minim(f[i]/2,nr);
b[i]=f[i]-a[i];
f[i]=0;
}
else
{
a[i]=minim(f[i]/2,nr);
nr-=minim(f[i]/2,nr);
b[i]=f[i]-a[i]-1;
f[i]=1;
}
}
bool ok=false;
for(int i=9;i>0;i--)
if(f[i]==1)
{
if(ok==false && nr)
{
nr--;
a[i]=f[i];
ok=true;
continue;
}
if(ok==false && !nr)
{
b[i]=f[i];
continue;
}
if(ok==true)
{
b[i]=f[i];
ok=false;
}
}
for(int i=1;i<10;i++)
{
for(int j=1;j<=a[i];j++)
A[++A[0]]=i;
for(int j=1;j<=b[i];j++)
B[++B[0]]=i;
}
prod(C,A,B);
afis(C);
return 0;
}