Cod sursa(job #479532)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 24 august 2010 13:32:24
Problema A+B Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.07 kb
/* A + B pe numere mari */
#include <stdio.h>
#include <string.h>
using namespace std;

#define MAX 100

char sir[MAX];
int a[MAX], b[MAX], c[MAX];
int lg, i, j;

void afisare (int nr[])
{
    FILE *g = fopen ("adunare.out","w");

    for (i=nr[0]; i>=1; --i)
        fprintf (g,"%d", nr[i]);
    fprintf (g,"\n");

    fclose (g);
}

int comparare (int nr1[], int nr2[])
{
    if (nr1[0] > nr2[0])
        return 1;
    else if (nr1[0] < nr2[0])
        return 2;
    else
    {
        i = nr1[0];
        j = nr2[0];
        while (nr1[i] == nr2[j] && i >= 1)
        {
            i --;
            j --;
        }

        if (nr1[i] > nr2[j])
            return 1;
        else if (nr1[i] < nr2[j])
            return 2;
        else
            return 0;
    }
}

void atribuire (int nr1[], int nr2[])
{
    int aux[MAX];

    for (i=nr1[0]; i>=0; --i)
        aux[i] = nr1[i];
    for (i=nr2[0]; i>=0; --i)
        nr1[i] = nr2[i];
    for (i=aux[0]; i>=0; --i)
        nr2[i] = aux[i];
}

void adunare (int nr1[], int nr2[], int rez[])
{
    int suma_cf = 0, suma_tr = 0;

    if (comparare (a, b) == 1)
        atribuire (a, b);

    i = j = 1;
    while (i <= nr1[0])
    {
        suma_cf = nr1[i] + nr2[j] + suma_tr;
        rez[j] = suma_cf % 10;
        suma_tr = suma_cf / 10;

        i ++;
        j ++;
        rez[0] ++;
    }

    while (j <= nr2[0])
    {
        suma_cf = nr2[j] + suma_tr;
        rez[j] = suma_cf % 10;
        suma_tr = suma_cf / 10;

        j ++;
        rez[0] ++;
    }

    if (suma_tr)
    {
        rez[j] = suma_tr;
        rez[0] ++;
    }

}

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

    fscanf (f,"%s", sir);
    lg = strlen (sir);
    for (i=lg-1; i>=0; --i)
    {
        a[0] ++;
        a[a[0]] = sir[i] - '0';
    }

    fscanf (f,"%s", sir);
    lg = strlen (sir);
    for (i=lg-1; i>=0; --i)
    {
        b[0] ++;
        b[b[0]] = sir[i] - '0';
    }

    adunare (a, b, c);
    afisare (c);

    fclose (f);
    return 0;
}