Po pierwsze jeszcze zanim zaczniesz cokolwiek obliczać Zamiast stosować funkcję "heksa" możesz po prostu utworzyć taką tablicę (string lub jak wolisz char).
string tab[16] = { "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F" };
W ten sposób zamiast liczbę zwracać do funkcji po prostu od razu ją wypisujesz bez zbędnych zer jak masz w oryginalnym swoim kodzie. W taki sposób:
cout << tab[numer];
Z góry zakładasz że zamieniona liczba, będzie miała do 16 cyfr. Lepiej jest tutaj zastosować tzw. vector - tablica dynamiczna.
Więcej o vectorach
Jak skorzystasz z tej tablicy, będzie po prostu łatwiej. Napisałem na szybko coś takiego:
unsigned int r = a;
while (r > 1) {
int j = r % 2;
vec1.push_back(tab[j]);
int h = floor(r / 2);
r = h;
}
vec1.push_back(tab[r]);
To jest praktycznie to samo co u ciebie:
for(z=16;z>=1;z--)
{
if(n%2==0)
{
tab[z]=0;
n=n/2;
}
else
{
tab[z]=1;
n=(n-1)/2;
}
}
Tylko u mnie jest to dla nieokreślonej liczby danych.
Już to tłumaczę robisz funkcję while (dopóki r > 1) - r jest to liczba podana przez użytkownika, w niej obliczasz resztę z dzielenia tej liczby przez 2 i wpisujesz ją do vectora (tablicy) za pomocą polecenia vec1.push_back(tab[j]); zauważ, iż nie wpisujemy bezpośrednio wyniku tylko wypisujemy numer tablicy która zadeklarowaliśmy wcześniej z literami i cyframi. Następnie obliczasz h czyli wynik dzielenia liczby r / 2 i następnie tą liczbą zastępujesz wcześniej zadeklarowane r.
Żeby później wypisać dane z tablicy vector piszesz np. tak:
for (auto it = vec1.crbegin(); it != vec1.crend(); it++) {
cout << *it;
}
Wiem, że to może się okazać na początku trudne, ale na pewno kiedyś docenisz tą tablicę. Tylko pamiętaj zanim zastosujesz tan algorytm musisz utworzyć tzw. kopie zmiennej głównej, którą wpisuje użytkownik. U mnie jest to:
unsigned int r = a;
Myślę, że to zrozumiesz, jakbyś czegoś nie rozumiał to napisz