Baze de numerație
Bazele de numerație dictează scrierea unui număr cu ajutorul puterilor bazei respective. De exemplu, în baza 10, numărul 245 este scris ca 245 = 2 * 10^2 + 4 * 10^1 + 5 * 10^0
, deci, cu alte cuvinte, un număr scris în baza n
va putea fi format din toate resturile posibile la împărțirea cu n
, adică 0, 1, 2, ..., n - 1
.
Prin convenție, începând cu restul 10
, numerele vor fi notate cu litere mari sau mici ale alfabetului, astfel: 10 = A, 11 = B, 12 = C, 13 = D, 14 = E, 15 = F, etc.
Transformarea din baza 10 în baza b
Numerele se pot transforma din baza 10
în oricare altă bază, b
. Pentru asta, se împarte n
la b
și se păstrează restul, apoi se împarte câtul la b
și tot așa. Apoi, resturile se scriu în ordinea inversă obținerii lor, iar numărul obținut este transformarea lui n
în baza b
.
Exemplu
5 : 2 = 2, rest 1
2 : 2 = 1, rest 0
1 : 2 = 0, rest 1
Deci numărul 5 din baza 10 în baza 2 este 101.
În c++
, transformarea din baza 10
în baza b
se poate scrie astfel.
int num[105];
int idx = 0;
int n, b;
cin >> n >> b;
while (n) {
num[idx] = n % b;
n /= b;
}
for (int i = idx - 1; idx >= 0; idx--) {
cout << num[idx];
}
Transformarea din baza b în baza 10
Transformarea din baza b
în baza 10
a unui număr n
se realizează după formula n(k)n(k-1)...n(1)n(0) = (n(k) * b^k) + (n(k-1) * b^(k-1)) + ... + (n(0) * b^0)
.
Exemplu
101 = 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 5
Deci numărul 101 din baza 2 în baza 10 este 5.
În c++
, transformarea din baza b
în baza 10
se poate scrie astfel.
int num[];
int idx;
int b;
...
int n = 0;
int p = 1;
for (int i = 0; i <= idx; i++) {
n += p * num[i];
p *= b;
}
cout << n;
Transformarea din baza b în baza c
Transformarea din baza b
în baza c
se realizează transformând numărul n
din baza b
în baza 10
, iar apoi din baza 10
în baza c
.
Transformarea din baza 10 în baza 2
#include <iostream>
using namespace std;
int n;
int ans[100];
int main() {
cin >> n;
int idx = 0;
while (n) {
ans[idx] = n % 2;
n /= 2;
}
for (int i = idx - 1; i >= 0; i--) {
cout << ans[i];
}
return 0;
}
Transformarea din baza 2 în baza 10
#include <iostream>
using namespace std;
int n[100];
int num;
int ans;
int main() {
cin >> num;
for (int i = num - 1; i >= 0; i--) {
cin >> n[i];
}
int p = 1;
for (int i = 0; i < num; i++) {
ans += n[i] * p;
p *= 2;
}
cout << ans;
return 0;
}