Cod sursa(job #479521)
/* 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;
}