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
în baza 2
, vrem să transformăm numărul dat în baza 10
.
Exemplu: Pentru n = 1110
, numărul în baza 10
este 14
.
Pentru a înțelege cum se convertește un număr din baza 2
în baza 10
, trebuie să înțelegem ce este o bază.
O bază de numerație reprezintă numărul de semne distincte necesare scrierii unui număr.
Mai exact, pentru a scrie un număr într-o bază b
, ne vom folosi de b
simboluri. Pentru baza pe care o folosim noi zilnic, baza 10
, avem cele 10
cifre: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
.
Pentru a număra într-o bază de numerație, luăm cifrele pe rând, iar când ajungem la final, adunăm 1
la următoarea cifră. Pentru baza 10
, avem primele 10
numere 0, 1, 2, …, 8, 9
, după care cifra revine la 0
și adunăm 1
la următoarea cifră: 10
. Procesul acesta continuă la infinit.
2
Când numărăm în baza 2
, având doar cifrele 0
și 1
, vom începe cu acestea, după care continuăm să numărăm astfel: 0, 1, 10, 11, 100, 101, 110, 111, …
.
2
în baza 10
?Având numărul nostru n
în baza 2
, pentru a-l transforma în baza 2
, vom proceda astfel:
0
;cif * 2^i
, unde cif
este cifra curentă, iar i
reprezintă indicele de la numerotarea din pasul 1;Iată un exemplu, pentru n = 10101110
:
Cunoscând regulile menționate mai devreme, implementarea în C++ este mai jos. Deoarece parcurgem cifrele de la dreapta la stânga, este foarte ușor să calculăm 2^i
pentru fiecare număr în parte.
#include <iostream>
using namespace std;
int main()
{
//Declarăm și citim numărul în baza 2
int n;
cin >> n;
//Calculăm și afișăm numărul în baza 10
int raspuns = 0, doiLai = 1;
while(n > 0) {
int cifraCurenta = n % 10; //Cifra curentă, de 0 sau de 1
raspuns += cifraCurenta * doiLai; //Adunăm la răspuns cif * 2^i, cum am menționat mai devreme
doiLai *= 2; //Cum i crește, 2^i se va înmulți cu 2.
n /= 10;
}
cout << raspuns;
return 0;
}