👤

Problema #122 de pe pbinfo va rog:
Cerinţa
Se citesc două numere naturale. Să se afişeze numărul care are mai multe cifre egale cu 1 în reprezentarea în baza 2.

Date de intrare
Programul citește de la tastatură două numere naturale.

Date de ieşire
Programul afișează pe ecran valoarea cerută.

Restricţii şi precizări
cele două numere citite vor fi mai mici decât 2.000.000.000
dacă cele două numere au acelaşi număr de cifre 1 în reprezentarea în baza 2 se va afişa cel mai mic dintre ele

Exemplu
Intrare

125 1250
Ieșire

125
Explicaţie
Reprezentarea lui 125 în baza 2 este 1111101, cu 6 cifre 1, iar reprezentarea lui 1250 este 10011100010, cu 5 cifre 1. Astfel, 125 are mai multe cifre 1 în reprezentarea în baza 2.


Răspuns :

Răspuns:

#include <iostream>

using namespace std;

int main()

{

   int a, b, ua=0, ub=0;

   cin >> a >> b;

   int copie_a=a, copie_b=b;

   while (copie_a)

   {

       if (copie_a%2==1) ++ua;

       copie_a/=2;

   }

   while (copie_b)

   {

       if (copie_b%2) ++ub;

       copie_b/=2;

   }

   if (ua==ub)

   {

       if (a<b) cout << a;

       else cout << b;

   }

   else if (ua>ub) cout << a;

           else cout << b;

   return 0;

}

Explicație:

Răspuns:

cin >> a >> b;

   aux1 = a;

   while(a > 0)

   {

       x = a % 2;

       if(x == 1)k1++;

       a = a / 2;

   }

   aux2 = b;

   while(b > 0)

   {

       y = b % 2;

       if(y == 1)k2++;

       b = b / 2;

   }

   if(k1 > k2)cout << aux1;

    else cout << aux2;

   return 0;

Explicație: