C++ - zamiana z systemu dziesiętnego na szesnastkowy

0

Witam mam zadanie zamienic z 10 na 16 system, zamienilem na binarny i dalej nie mam pojecia jak to zrobic, jakies porady ?:)

2
#include <iostream>

int main() {
    std::cout << std::hex << 93 << '\n';
}
2

Jak zamieniłeś na binarny to dalej z górki każde 4 bita to cyfra szesnastkowa.
Tu masz z każdego na każdy: http://forum.4programmers.net/1005274

2

Jak masz poprawny binarny to już "kaszka z mleczkiem". Tak jak napisał @_13th_Dragon
screenshot-20191014121355.png

1

Możesz też użyć tego:

#include<iostream>
#include<string>

using namespace std;

void decimal_to_any() {
	int a=0, base = 0;
    cout<< "Convert integer to any base up to 16 \n";
    cout<< "Enter base (2 - 16): \n";
    cin >> base;
    cout << "\n";
    cout<< "Enter integer to converse: \n";
    cin >> a;
    cout << "\n";
    string letters ="0123456789ABCDEF";
    int rest;
    int c = 0;
    char b[sizeof(a)<<3];
    do {
        rest = a % base;
        b[c]=rest;
        a=a / base;
        c++;
	}
    while (a!=0);
	for(int i= c-1 ; i >= 0;i--)
        cout << letters[b[i]];
}

To tylko nieco zmieniony kod z tego wątku: https://4programmers.net/Forum/C_i_C++/320885-konwersjazamiana_z_systemu_dziesietnego_na_szesnastkowyheksadecymalny?p=1556927#id1556927

EDIT: Wersja rekurencyjna, w pseudokodzie (Python), // - dzielenie w integerach, w C/C++ można zastąpić przez /:

def dec_to_any(n,base):
	"""convert decimal n to base, base: 2 - 16"""
    conv_string = "0123456789ABCDEF"
    if n < base:
       return conv_string[n]
    else:
        return dec_to_any(n // base, base) + conv_string[n % base]

EDIT2 wersja rekurencyjna w C++:

string decimal_to_any(int n, int base) {
	string conv_string = "0123456789ABCDEF";
	if (n < base){
		char c = conv_string[n];
		string str(1, c);
		return str;
	}
	else
		return decimal_to_any2(n / base, base) + conv_string[n % base];
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1