Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- #define Nmax 10001
- using namespace std;
- void Citire( int X[] )
- {
- char s[Nmax]; ///citim initial numarul ca un sir de caracatere
- int i;
- cin >> s;
- X[0] = strlen( s ); ///in X[0] se va gasi numarul de cifre ale lui X
- for ( i = X[0] - 1; i >= 0; --i )
- X[X[0]-i] = int( s[i] - '0' ); ///memoram numarul invers pentru a lucra mai usor la adunare
- }
- void Adunare( int X[], int Y[] )
- {
- int Z[Nmax] = {0}; ///Z = X + Y
- int i;
- int t = 0; ///t = "transportul" (cat "tinem minte" dupa ce adunam X[i] si Y[i])
- Z[0] = max( X[0], Y[0] ); ///Z va avea ca numar de cifre maximul dintre X[0] si Y[0], eventual +1
- for ( i = 1; i <= Z[0]; ++i )
- {
- t += X[i] + Y[i]; ///daca X[i] + Y[i] depaseste 10, vom avea nevoie sa tinem minte "transportul"
- Z[i] = t % 10;
- t /= 10;
- }
- if ( t > 0 ) ///daca dupa ce am terminat "transportul" nu este 0 (nu poate avea mai mult de o cifra),
- Z[++Z[0]] = t; ///suplimentam Z-ul
- for ( i = Z[0]; i >= 1; --i ) ///afisam suma (invers, conform conventiei de la citire)
- cout << Z[i];
- }
- int Comparare( int X[], int Y[] )
- {
- if ( X[0] > Y[0] ) ///X are mai multe cifre decat Y, deci X > Y
- return 1;
- else
- if ( X[0] < Y[0] )
- return -1; ///Y are mai multe cifre decat X, deci X < Y
- else ///X si Y au acelasi numar de cifre
- {
- int i;
- for ( i = X[0]; i >= 1; --i ) ///comparam cifra cu cifra
- if ( X[i] > Y[i] )
- return 1; ///X > Y
- else
- if ( X[i] < Y[i] )
- return -1; ///X < Y
- }
- return 0; ///daca nu s-a iesit mai devreme din subprogram,
- ///returnam 0 deoarece X si Y sunt egale
- }
- int main()
- {
- int A[Nmax], B[Nmax];
- Citire( A );
- Citire( B );
- Adunare( A, B );
- cout << '\n' << Comparare( A, B );
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment