Problem zamiany liczby dziesiętnej na binarną został omówiony w tym miejscu.
W tym artykule omówimy zamianę z systemu dziesiętnego na dowolny system o podstawie p, gdzie
$$p\ \in\ \{2, 3, ..., 15, 16\}$$
Rozwiązanie zagadnienia jest analogiczne do zamiany z systemu dziesiętnego na binarny. Liczbę w systemie dziesiętnym skracamy, dzieląc przez podstawę p do momentu uzyskania wartości 0. Po prawej stronie wypisujemy reszty z dzielenia przez p. Rozwiązaniem będzie spisanie wartości znajdujących się po lewej stronie w odwrotnej kolejności.
Przeanalizujmy kilka przypadków:
zamieńmy liczbę 100 na system trójkowy:
Następnie spisujemy wynik od końca i otrzymujemy:
$$100=(10201)_3$$
Przedstawmy teraz liczbę 1201 w systemie szesnastkowym:
Wynik spisujemy od końca i otrzymujemy:
$$1201 = (4B1)_{16}$$
Problem rozwiążemy rekurencyjnie.
Dwie liczby:$$n\ \in\ N$$, oraz $$p \epsilon \{2,\ 3,\ ...,\ 16\}$$.
Liczba n zapisana w systemie o podstawie p.
Rozwiązanie w C++:
#include<iostream>
using namespace std;
void zamiana(long long n, int p)
{
if(n>0)
{
zamiana(n/p,p);
if(n%p>9)
//dla systemów o podstawie większej niż 9 cyfry są literami
switch(n%p)
{
case 10:
cout<<"A";
break;
case 11:
cout<<"B";
break;
case 12:
cout<<"C";
break;
case 13:
cout<<"D";
break;
case 14:
cout<<"E";
break;
case 15:
cout<<"F";
break;
}
else
cout<<n%p;
}
}
int main()
{
int p;
long long n;
cout<<"Podaj liczbę i podstawę systemu: ";
cin>>n>>p;
cout<<"Liczba "<<n<<" w systemie "<<p<<": ";
if(n==0)
cout<<0;
else
zamiana(n,p);
return 0;
}