Contact și feedback

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.

Shortcuturi

Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.

Generale

Meniu shortcuturi?
Căutare probleme sau utilizatori/
Navigare printre rezultatele căutării↑, ↓
Meniu de contact și feedbackCTRL + Shift + F
Ieșire din meniuriEsc

Editor probleme

Setări editorCTRL + Shift + S
Schimbare stil editorCTRL + Shift + E
Șabloane de codCTRL + Shift + 1/2/3
Golire editorCTRL + Shift + 4

Cel mai semnificativ bit în C++

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:

https://i.ibb.co/5nCCLTr/image.png

Explicarea algoritmului

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.

Implementare C++

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;
}

Alte resurse și bibliografie

Obține medalia mult dorită. Devino As la olimpiadă.

Curs complet de olimpiadă, pregătit de olimpici de la Oxford și TU Delft.

Cuprinsul lecției

Se încarcă…

Citește și

Transformarea unui număr din baza 10 în baza 2 în C++Maximul și minimul a trei valori în C++Suma divizorilor numerelor de la 1 la N (Folosind ciurul lui Eratostene)Transformarea unei litere mici în literă mare în C++Materia pentru olimpiada de informatică - tot ce trebuie să știiCel mai frecvent element dintr-un șir în C++Câte numere naturale sunt într-un interval dat? (C++)Ce înseamnă variabilă globală și locală în C++?Vectorii în C++: citire și afișareIndicatorul lui Euler în C++Cel mai puțin semnificativ bit în C++Instrucțiunea while (structuri repetitive)Funcții predefinite în C++ (matematice, șiruri de caractere)Al N-lea termen dintr-o progresie aritmeticăRădăcina cubică a unui număr în C++ (cube root)Ciurul lui Eratostene în C++Verificare număr prim în C++ (Clasa a IX-a)Numărul de cifre ale factorialului unui numărMatrice pătratice în C++. Diagonala principală și secundarăCifra maximă a unui număr recursiv în C++Afișarea divizorilor primi ai unui număr în C++Bordarea unei matrice în C++Cifra de control a unui numărRadicalul unui număr în C++ (rădăcina pătrată)Cel mai semnificativ bit în C++Calculul combinărilor de n luate câte k (nCk) în C++Verificare dacă șir de caractere este palindrom în C++Verifică dacă o literă este mică sau mare în C++Cel mai mic/mare divizor prim al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Instrucțiunea continue (structuri repetitive)Codul ASCII (tabel complet)Valoarea absolută (modulul) unui număr în C++Aplicații cu ciurul lui Eratostene în C++: suma divizorilor, numărul divizorilorOglinditul recursiv al unui număr în C++Afișarea elementelor unui vector recursiv în C++Aria și circumferința unui cerc în C++Divide et Impera (metodă de programare C++)Numere triunghiulare. Verificarea unui număr triunghiularComentarii în C++Verificarea unui an bisect în C++Cum să citești și să afișezi în fișiere în C++Matrice Fibonacci - al n-lea termen Fibonacci în timp logaritmicNumărul minim de peroane pentru o gară în C++Află secolul unui an citit de la tastatură în C++Numărul aranjamentelor în C++ (formula aranjamentelor)Căutare binară în C++Aria unui triunghi folosind coordonatele acestora în C++Cum să afișezi partea întreagă a unui număr real în C++CMMMC a două numere în C++ (cel mai mic multiplu comun)Al N-lea termen Fibonacci în C++Al N-lea termen dintr-o progresie geometricăVerifică dacă un număr aparține șirului Fibonacci în C++Numărul de divizori primi ai unui număr în C++Cifra maximă și minimă a unui număr în C++Prima cifră a unui număr în C++Verifică dacă un număr dat este o putere de 2 în C++Interschimbarea a două variabile în C++ (3 metode)Cel mai mare divizor comun (CMMDC) a două numere în C++Recursivitate în C++Algoritm recursiv pentru căutare binară (clasa a X-a)Verifică dacă o literă este vocală în C++Numărul de divizori al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Șirul lui Fibonacci în C++Do while vs while în C++ - Care e diferența?Instrucțiunea for (structuri repetitive)Vectori de frecvență (de apariții) în C++Numărul de apariții al unui număr într-un vector în C++Instrucțiunea do while (structuri repetitive)Factorialul unui număr în C++Inversarea unui vector în C++Matrice în C++. Declararea și parcurgerea tablourilor bidimensionaleCe este o variabilă unsigned în C++?Inversarea unui șir de caractere în C++Structuri repetitive (while, do while, for, etc)Pointer în C++. Variabile de tipul char * (char steluță)Tipul struct în C++. Ce sunt structurile de date neomogeneVectorii în C++: declarare și parcurgereSuma divizorilor unui număr în C++Copiuțe: Cifrele unui numărTransformarea unei litere mari în literă mică în C++Cea mai lungă secvență de elemente crescătoare în C++Aflarea sumei primelor N sume GaussCifrele unui număr. Prelucrarea cifrelor unui număr în C++Suma numerelor naturale dintr-un interval dat în C++Cum să calculezi instant 2 la puterea N în C++Suma elementelor unui vector recursiv în C++Funcții în C++. Ce sunt subprogrameleCitește un șir de caractere cu spații în C++Verifică dacă un bit de pe o anumită poziție este 1 sau 0 în C++Interclasarea a doi vectori în C++Ce este o funcție void în C++?Maximul și minimul a n valori în C++Mediana unui șir de valori în C++Șiruri de caractere în C++. Tot ce trebuie să știiCitirea și afișarea matricelor în C++Combinatorică în C++: permutări, aranjamente, combinări și alteleDe ce cer unele probleme răspunsul modulo 666013 sau modulo 1.000.000.007?Ce înseamnă endl în C++?Suma 1 + 2 + 3 + ... + N în C++Maximul și minimul a două valori în C++Numărul de divizori al unui număr în C++Oglinditul unui număr în C++Verificare dacă un număr este palindrom în C++Sortare crescătoare recursivă în C++ - Merge sort și Bubble sortInstrucțiunea de decizie în C++: if, else, switch, caseIndicatorul lui Euler al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Ridicarea la putere în timp logaritmic în C++. Exponențiere rapidăVerifică dacă trei puncte sunt coliniare C++Tipuri de date în C++: numere întregi, reale, caractere și alteleCMMDC recursiv a două numere naturale în C++Numărul permutărilor în C++ (formula permutărilor)Complexitatea unui algoritm (timp și spațiu) în C++Verifică dacă un caracter este literă în C++Generarea șirului Fibonacci generalizat în C++Verifică dacă un număr este par sau impar fără modulo în C++Tutorial instalare CodeBlocks (ușor) - Introducere în informatică C++Numărul combinărilor în C++ (formula combinărilor)Operații cu numere mari în C++ - Toate funcțiile explicateMaximul și minimul unui vector în C++Instrucțiunea break (structuri repetitive)Cel mai mic număr cu suma cifrelor N în C++Transformarea unui număr din baza 2 în baza 10 în C++Verifică dacă un caracter este cifră în C++Distanța dintre două puncte în C++

© Drepturi de autor

Echipa InfoAs își rezervă drepturile de autor pentru conținutul acestei pagini. Copierea conținutului fără acordul scris expres al InfoAs reprezintă o încălcare a Legii 8/1996 și va fi tratată ca atare.

Trimite lecția

Toată lecția

Doar videoclipul pe YouTube

Informatica devine ușoară cu InfoAs

Intră în cont