Informatică, întrebare adresată de burteamaria, 9 ani în urmă

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.
am rezolvat-o si eu,dar imi da 80 de puncte ,de ce?
#include
using namespace std;
int a,b,x,y,u,u1,nr_a,nr_b;
int main()
{cin>>a>>b;
x=a;
y=b;
while(x!=0)
{u=x%2;
if(u==1)nr_a++;
x=x/2;}
while(y!=0)
{u1=y%2;
if(u1==1)nr_b++;
y=y/2;}
if(nr_a==nr_b)
{if(a>b)cout< else
cout< if(nr_a>nr_b)cout< else
cout< return 0;}

Răspunsuri la întrebare

Răspuns de antonii
0
As spune ca problema e timpul. Cand faci acele operatii de impartire. Modulul ia foarte multtt timp pe anumite arhitecturi. Iti sugerez ca in loc de modul sa incerci altceva(doar ca test..ar putea fi chiar mai incet): mod=A – B * (int)(A / B). Adica A/B trebuie sa rotunjesti si apoi sa-l inmultesti cu B.

Daca nu merge nici asa incearca libaria bitset. Problema iti spune ca numerele sunt pana la 2*10^9 deci in binar ai avea nevoie de 31 de spatii(2*10^9 in binar e 
1110111001101011001010000000000).
Si folosesti codul:
    string nr_in_binar=bitset<31>(nr);


burteamaria: de fapt era nevoie sa mai pun un else si mi-a dat 100 de puncte
Alte întrebări interesante