Cod sursa(job #479521)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 24 august 2010 12:44:33
Problema A+B Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 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");
    int z;

    for (z=1; z<=nr[0]; ++z)
        fprintf (g, "%d", nr[z]);
    fprintf (g, "\n");

    fclose (g);
}

int compara (int nr1[], int nr2[])
{
    int z = 1;
    while (nr1[z] == nr2[z])
        z ++;
    if (nr1[z] > nr2[z])
        return 1;
    else if (nr1[z] < nr2[z])
        return 2;
    else
        return 0;
}

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

    if (compara (nr1, nr2) == 1)
    {
        for (i=0; i<=nr1[0]; ++i)
            aux[i] = nr1[i];
        for (i=0; i<=nr2[0]; ++i)
            nr1[i] = nr2[i];
        for (i=0; i<=aux[0]; ++i)
            nr2[i] = aux[i];
    }
}

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

    i = nr1[0];
    j = nr2[0];

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

        i --;
        j --;
    }

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

        j --;
    }

    rez[0] = nr2[0];
}

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


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

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

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

    fclose (f);
    return 0;
}