davidbejenariu2

cod C++

Nov 9th, 2020
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. #define Nmax 10001
  4.  
  5. using namespace std;
  6.  
  7. void Citire( int X[] )
  8. {
  9.     char s[Nmax]; ///citim initial numarul ca un sir de caracatere
  10.     int i;
  11.  
  12.     cin >> s;
  13.  
  14.     X[0] = strlen( s ); ///in X[0] se va gasi numarul de cifre ale lui X
  15.  
  16.     for ( i = X[0] - 1; i >= 0; --i )
  17.         X[X[0]-i] = int( s[i] - '0' ); ///memoram numarul invers pentru a lucra mai usor la adunare
  18. }
  19.  
  20. void Adunare( int X[], int Y[] )
  21. {
  22.     int Z[Nmax] = {0}; ///Z = X + Y
  23.     int i;
  24.     int t = 0; ///t = "transportul" (cat "tinem minte" dupa ce adunam X[i] si Y[i])
  25.  
  26.     Z[0] = max( X[0], Y[0] ); ///Z va avea ca numar de cifre maximul dintre X[0] si Y[0], eventual +1
  27.  
  28.     for ( i = 1; i <= Z[0]; ++i )
  29.     {
  30.         t += X[i] + Y[i]; ///daca X[i] + Y[i] depaseste 10, vom avea nevoie sa tinem minte "transportul"
  31.         Z[i] = t % 10;
  32.         t /= 10;
  33.     }
  34.  
  35.     if ( t > 0 ) ///daca dupa ce am terminat "transportul" nu este 0 (nu poate avea mai mult de o cifra),
  36.         Z[++Z[0]] = t; ///suplimentam Z-ul
  37.  
  38.     for ( i = Z[0]; i >= 1; --i ) ///afisam suma (invers, conform conventiei de la citire)
  39.         cout << Z[i];
  40. }
  41.  
  42. int Comparare( int X[], int Y[] )
  43. {
  44.     if ( X[0] > Y[0] ) ///X are mai multe cifre decat Y, deci X > Y
  45.         return 1;
  46.     else
  47.         if ( X[0] < Y[0] )
  48.             return -1; ///Y are mai multe cifre decat X, deci X < Y
  49.         else ///X si Y au acelasi numar de cifre
  50.         {
  51.             int i;
  52.  
  53.             for ( i = X[0]; i >= 1; --i ) ///comparam cifra cu cifra
  54.                 if ( X[i] > Y[i] )
  55.                     return 1; ///X > Y
  56.                 else
  57.                     if ( X[i] < Y[i] )
  58.                         return -1; ///X < Y
  59.         }
  60.  
  61.     return 0; ///daca nu s-a iesit mai devreme din subprogram,
  62.               ///returnam 0 deoarece X si Y sunt egale
  63. }
  64.  
  65. int main()
  66. {
  67.     int A[Nmax], B[Nmax];
  68.    
  69.     Citire( A );
  70.     Citire( B );
  71.  
  72.     Adunare( A, B );
  73.    
  74.     cout << '\n' << Comparare( A, B );
  75.  
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment