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