Cod sursa(job #466705)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 27 iunie 2010 13:30:38
Problema Prod Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 1 Marime 2.04 kb
#include <stdio.h>
#include <string.h>
#include <cmath>
using namespace std;

#define MAX 1000001

int sir[MAX];
int nr1[MAX], nr2[MAX];
int n, i, j, k;

void mulmare (int A[], int B[]) // A <- A * B
{
    int i, j, t, C[MAX];        // C <- A * B

    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));   // A <- C
}

void afisare(int C[])
{
    FILE *g = fopen ("prod.out","w");
    for (i=C[0]; i>=1; --i)
        fprintf (g, "%d", C[i]);
    fclose(g);
}

int main ()
{
    FILE *f = fopen ("prod.in","r");

    for (i=1; i<=9; ++i)
    {
        fscanf (f,"%d", &k);
        while (k)
        {
            n ++;
            k --;
            sir[n] = i;
        }
    }

    if (n % 2 == 0)
    {
        for (i=1; i<=n; ++i)
        {
            if (i % 2 == 0)
            {
                nr2[0] ++;
                nr2[nr2[0]] = sir[i];
            }
            else
            {
                nr1[0] ++;
                nr1[nr1[0]] = sir[i];
            }
        }
        /*printf ("nr1 = ");
        afisare (nr1);
        printf ("\nnr2 = ");
        afisare (nr2);*/
        mulmare (nr1, nr2);
        //printf ("\n\nProdus = ");
        afisare (nr1);
    }
    else
    {
        nr2[0] = 1;
        nr2[nr2[0]] = sir[1];
        for (i=2; i<=n; ++i)
        {
            if (i % 2 != 0)
            {
                nr1[0] ++;
                nr1[nr1[0]] = sir[i];
            }
            else
            {
                nr2[0] ++;
                nr2[nr2[0]] = sir[i];
            }
        }

       /* printf ("nr1 = ");
        afisare (nr1);
        printf ("\nnr2 = ");
        afisare (nr2);*/
        mulmare (nr1, nr2);
        //printf ("\n\nProdus = ");
        afisare (nr1);
    }

    fclose(f);
    return 0;
}