Cod sursa(job #466678)

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

#define MAX 10001

int sir[MAX];
int nr1[MAX], nr2[MAX];
int n, i, j = 9, k;
long long a, b;

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
}

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

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

    /*for (i=1; i<=n; ++i)
        printf ("%d", sir[i]);*/

    if (n % 2 == 0)
    {
        for (i=n; i>=1; --i)
            if (i % 2 == 0)
                a = a * 10 + sir[i];
            else
                b = b * 10 + sir[i];
        //printf ("a = %lld\nb = %lld\n\n", a, b);
        //printf ("a * b = %lld", a * b);
        fprintf (g,"%lld", a * b);
    }
    else
    {
        for (i=n; i>=2; --i)
            if (i % 2 != 0)
                a = a * 10 + sir[i];
            else
                b = b * 10 + sir[i];
        b = b * 10 + sir[1];
        //printf ("a = %lld\nb = %lld\n\n", a, b);
        //printf ("a * b = %lld", a * b);
        fprintf (g,"%lld", a * b);
    }

   /* nr1[0] = 2;
    nr1[1] = 1;
    nr1[2] = 2;

    nr2[0] = 1;
    nr2[1] = 9;

    mulmare(nr1, nr2);
    for (i=nr1[0]; i>=1; --i)
        printf ("%d", nr1[i]);*/

    return 0;
}