Pagini recente » Cod sursa (job #2408772) | Cod sursa (job #898776) | Cod sursa (job #1481841) | Cod sursa (job #2792497) | Cod sursa (job #481401)
Cod sursa(job #481401)
/* 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;
}