Witam mam zadanie zamienic z 10 na 16 system, zamienilem na binarny i dalej nie mam pojecia jak to zrobic, jakies porady ?:)
0
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
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];
}