Cod sursa(job #70461)

Utilizator andrei_infoMirestean Andrei andrei_info Data 6 iulie 2007 00:01:20
Problema Sarpe Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.12 kb
#include <stdio.h>
#include <string.h>

typedef int nr_mare[10100];

nr_mare n;


void add( nr_mare &a, nr_mare b)
{
     int i,t =0;
     
     for (i=1; i<=a[0] || i <= b[0] || t > 0; i++, t/=10)
         a[i] = ( t+= a[i] + b[i] ) % 10;
     a[0] = i-1;
}

void scadere( nr_mare &a, nr_mare b)
{
     int i,t=0;
      for (i = 1; i <= a[0]; i++)
          {
                  a[i] = a[i] - b[i] - t;
                  if (a[i] < 0 ) t =1; else t=0;
                  a[i] += t*10;
                  
                   //a[i] += (t = (a[i] -= b[i] + t) < 0) * 10;  
          }
      for (; a[0] > 1 && !a[a[0]]; a[0]--);  
}


void mul(nr_mare &a, nr_mare b)  
{  
       int i, j, t;  
       nr_mare c;
       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));  
}  

void citeste()
{
     freopen("sarpe.in","r", stdin);
     char str[1010];
     
     scanf("%s",&str);
     
     for (int i=strlen(str)-1; i >= 0; i--)
         n[++n[0]] = str[i] - '0';
     fclose(stdin);
     
}
     
     

int main ()
{
         citeste();
         nr_mare rez,aux,aux2,patru,doi,unu;
         patru[0]=1; patru[1]=4;
         doi[0] = 1; doi[1] = 2;
         unu[0] = 1; unu[1] = 1;
         
         
         memcpy(rez,n,sizeof(rez));
         
         mul(rez,patru);
         
         memcpy(aux,n,sizeof(aux));
         scadere(aux,unu);
         
         memcpy(aux2,aux,sizeof(aux));
         scadere(aux2,unu);
         
         mul(aux,aux2);
         mul(aux,doi);
         add(rez,aux);
         
         freopen("sarpe.out","w", stdout);
         if ( n[0] == 1 && n[1] == 1 ) 
            printf("1");
         else 
         for (int i=rez[0]; i > 0 ; i-- ) 
             printf("%d",rez[i]);
         fclose(stdout);
         
}