Cod sursa(job #466649)

Utilizator udrescu_cristiUdrescu Cristian udrescu_cristi Data 27 iunie 2010 12:38:32
Problema Prod Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 1 Marime 1.08 kb
#include<stdio.h>
#include<iostream.h>

 int a[10000],b[10000],aux[10000],i,j,m,n,x,nr,y;
 
 void mul(int a[10000], int b[10000])
{
      int i, j, t, c[10000];
      memset(c, 0, sizeof(c));
      for (i = 1; i <= a[0]; i++)
      {
              for (t=0, j=1; j <= b[0] || t; j++, t/=10)
                      c[i+j-1]=(t+=c[i+j-1]+a[i]*b[j])%10;
              if (i + j - 2 > c[0]) c[0] = i + j - 2;
      }
      memcpy(a, c, sizeof(c));
}

int main()
{
  freopen("prod.in","r",stdin);
  freopen("prod.out","w",stdout);
  
  for(i=1;i<=9;i++)
  {
    scanf("%d",&x);
for(j=nr+1;j<=nr+x;j++)
 aux[j]=i;
nr=nr+x;
  }
  
  n=m=1;
  a[1]=aux[nr];
  b[1]=aux[nr-1];
   if(nr%2) x=2;
   else
	   x=1;
  for(i=nr-2;i>=x;i-=2)
  {
	  n++;
	  m++;
	a[n]=aux[i-1];
    b[m]=aux[i];
  }
if(x==2) 
{
m++;
b[m]=aux[1];
}
 a[0]=n;
 b[0]=m;
 for(i=1;i<=n/2;i++)
 {
	 y=a[i];
	 a[i]=a[n+1-i];
	 a[n+1-i]=y;
 }
 for(i=1;i<=m/2;i++)
 {
	 y=b[i];
	 b[i]=b[m+1-i];
	 b[m+1-i]=y;
 }
 
 mul(a,b);
 
for(i=a[0];i>=1;i--)
	printf("%d",a[i]);

return 0;
}