Se citeşte de la tastatură un număr n, care este reprezentarea numărului în baza q, q [2, 9]. Să se afişeze numărul reprezentat în baza p, p =[2,9]. q şi p se introduc de la tastatură. 7
#include <iostream>
using namespace std;
int main() {
int n, q, p;
cin >> n >> q >> p;
// Convertim din baza q in baza 10
int n10 = 0;
int b = 1;
while (n != 0) {
int cifra = n % 10;
n10 += cifra * b;
b *= q;
n /= 10;
}
// Convertim din baza 10 in baza p
int resturi[32];
int i = 0;
while (n10 != 0) {
resturi[i] = n10 % p;
n10 /= p;
i++;
}
if (i == 0) {
cout << 0 << endl;
} else {
for (int j = i-1; j >= 0; j–) {
cout << resturi[j];
}
cout << endl;
}
return 0;
}
- Se împarte numărul la p și se reține restul.
- Se împarte numărul obținut în pasul anterior la p și se reține restul.
- Se continuă până când numărul obținut în pasul anterior devine 0.
- Cifră cu cifră, de la dreapta la stânga, se afișează resturile obținute la fiecare pas.
Exemplu:
n = 101101 (baza 2) q = 2 p = 5
Pentru a converti în baza 10, folosim algoritmul din exercițiul anterior și obținem n = 45.
Pentru a converti din baza 10 în baza 5, împărțim succesiv numărul la 5 și reținem resturile:
45 : 5 = 9, rest 0 9 : 5 = 1, rest 4 1 : 5 = 0, rest 1
Resturile obținute, citite de la dreapta la stânga, sunt 104, deci n în baza 5 este 104.
Observăm că folosim un vector de dimensiune 32 pentru a reține resturile obținute în al doilea algoritm. Acest lucru este suficient pentru a converti numerele de maxim 32 de cifre.