Pagini recente » Cod sursa (job #2232350) | Cod sursa (job #1801905) | Cod sursa (job #2596777) | Cod sursa (job #2542831) | Cod sursa (job #697142)
Cod sursa(job #697142)
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 10000
using namespace std;
char A[N];
int D[N];
int S[N];
int Rez[N];
int max(int a, int b) {
if(a > b) return a;
return b;
}
int main() {
freopen("adunare.in","r",stdin);
freopen("adunare.out","w",stdout);
scanf("%s\n", &A); //citim primul termen ca string
int lena = strlen(A);
D[0] = lena;
lena--;
for(int i = lena; i >= 0; i--) //punem cifrele in sirul D in ordinea inversa citirii(tinem numarul invers in memorie)
D[lena - i + 1] = A[i] - '0';
scanf("%s\n", &A);
lena = strlen(A); //analog pentru al doilea termen
S[0] = lena;
lena--;
for(int i = lena; i >= 0; i--)
S[lena - i + 1] = A[i] - '0';
for(int i = 1; i <= max(D[0], S[0]); i++)
Rez[i] = D[i] + S[i];
//acum in vectorul Rez s-ar putea sa avem numere mai mari decat 9, efectuam transportul
int dimRez = max(D[0], S[0]);
int t = 0;
int j;
for(j = 1; j <= dimRez || t; j++) {
int aux = t; //folosim o variabila auxiliara ca sa memoram transportul cu care am ajuns pe poz j
t = (aux + Rez[j]) / 10; //calculam noul transport, cel cu care vom pleca din poz j
Rez[j] = (Rez[j] + aux) % 10; //calculam cifra de pe poz j pe baza transportului cu care am ajuns(memorat in aux)
}
while(Rez[j] == 0) j--; //eliminam cifrele de 0 de la inceputul numarului
for(int k = j; k > 0; k--)
printf("%d",Rez[k]);
printf("\n");
return 0;
}