Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.
Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.
Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.
Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.
Meniu shortcuturi | ? |
Căutare probleme sau utilizatori | / |
Navigare printre rezultatele căutării | ↑, ↓ |
Meniu de contact și feedback | CTRL + Shift + F |
Ieșire din meniuri | Esc |
Setări editor | CTRL + Shift + S |
Schimbare stil editor | CTRL + Shift + E |
Șabloane de cod | CTRL + Shift + 1/2/3 |
Golire editor | CTRL + Shift + 4 |
Dându-se un număr natural n
, să se găsească bitul de 1
cel mai semnificativ al lui n
.
Exemplu. Pentru n = 10
, reperezentarea sa binară este 1010
, iar cel mai semnificativ bit de 1
este cel de pe poziția 3
:
Să comparăm problema în baza 10
(baza pe care o folosim noi de obicei). Dacă am vrea să determinăm poziția celei mai semnificative cifre (exemplu: pentru n = 52034
, poziția este 5
, dacă numărăm de la 1
), practic va trebui să calculăm numărul de cifre ale lui n
în baza 10
.
Vom proceda similar. Cât timp n
are cifre binare (n ≠ 0
), îl vom împărți la 2
și vom contoriza numărul de împărțiri făcute. Acest număr este poziția celui mai semnifiactiv bit al lui n
.
Va trebui să scădem 1
din răspuns, deoarece dacă un număr are k
cifre binare și cifrele sale sunt numerotate de la 0
, atunci cea mai semnificativă cifră se află pe poziția k - 1
.
Iată codul în C++:
#include <iostream>
using namespace std;
int main()
{
//Declarăm și citim numărul nostru, n
int n;
cin >> n;
//Determinăm cel mai semnificativ bit de 1
int poz = 0;
while(n != 0) { //Cât timp n are cifre
n = n / 2; //Tăiem ultima cifră (împărțim la 2 pentru că lucrăm în baza 2)
poz++; //Incrementăm poziția celui mai semnificativ bit
}
cout << poz - 1; //Afișăm poziția: scădem 1 pentru că numărăm cifrele de la 0
return 0;
}