Zamiana z dziesiętnego na binarny
Ostatnio zmodyfikowano 2017-12-16 02:25
Zigor36 Temat założony przez niniejszego użytkownika |
Zamiana z dziesiętnego na binarny » 2017-12-15 16:09:20 Witam, szukam lekkiej pomocy z moim programem zamieniającym liczbę dziesiętną na binarną. Kompilator nic nie wykrywa, ale już w programie gdy poda się daną liczbę, zamiast liczyć ją na bin, to pokazuje same jedynki albo zera. #include <iostream> #include <conio.h> using namespace std; int liczba, ile = 1; int main() { cout << "Podaj liczbe: "; cin >> liczba; int tab[ ile ]; for( int x = 0; x <= ile; x++ ) { if( liczba % 2 == 0 ) { tab[ x ] = 0; cout << tab[ x ]; ile++; } else { tab[ x ] = 1; cout << tab[ x ]; ile++; } } getch(); }
|
|
Zigor36 Temat założony przez niniejszego użytkownika |
» 2017-12-15 16:15:48 Ok kombinowałem trochę i działa dobrze, ale pokazuje na ekran tylko 5 cyfr. I teraz znów myślę w jaki sposób mógłbym zapisać warunek ile razy ma się wykonać pętla for. Zamiast 5 napisałem "ile", tylko jak mogę dowiedzieć się ile razy ta pętla ma się wykonać, jakiego algorytmu do tego użyć? Totalnie nie mam pomysłu, ale wciąż myślę, proszę was nakierujcie mnie jakoś :D #include <iostream> #include <conio.h> using namespace std; int liczba, ile; int main() { cout << "Podaj liczbe: "; cin >> liczba; for( int x = 0; x <= ile; x++ ) { int tab[ ile ]; if( liczba % 2 == 0 ) { liczba = liczba / 2; tab[ x ] = 0; cout << tab[ x ]; } else if( liczba % 2 == 1 ) { liczba = liczba / 2; tab[ x ] = 1; cout << tab[ x ]; } else exit( 0 ); } getch(); }
|
|
mateczek |
» 2017-12-16 02:25:56 kilka sposobów na zamianę: 1. Metoda z funkcją rekurencyjną jak dla mnie jest najtrudniejsza do wyobrażenia. Ale ma odwracanie bitów niejako z automatu. 2. W metodzie drugiej policzyłem długość liczby w zapisie binarnym korzystając z właściwości że jest ona równa "log2(liczba)+1" Dlatego mogę wpisywać do stringa od końca; 3. W metodzie pierwszej nowo wyliczone pole wstawiam na początek stringa przy pomocy funkcji insert (gdybym dodawał na koniec musiał bym po konwersji odwrócić bity) #include <iostream> #include<cmath> #include<string> using namespace std;
string intToStr( int numer ) { char znak = numer % 2 + '0'; numer /= 2; if( numer > 0 ) { return intToStr( numer ) + znak; } else { string temp( 1, znak ); return temp; } }
int main() { int liczba; cout << "Podaj liczbe: "; cin >> liczba; int temp = liczba; string tab, tab2; while( temp ) { tab.insert( tab.begin(), temp % 2 + '0' ); temp /= 2; } temp = liczba; int binlong = log2( temp ); tab2.resize( binlong + 1 ); for( int i = binlong; i >= 0; i-- ) { tab2[ i ] = temp % 2 + '0'; temp /= 2; } cout << tab << " " << tab2 << " " << intToStr( liczba ) << endl; }
w każdym zapisie zamiast "/2" mogę zastosować operator przesuwania bitów o jeden ">>=1". A zamiast dzielenia modulo testowanie przy pomocy maski "&1" #include <iostream> #include<string> using namespace std; int main() { cout << "Podaj liczbe: "; int liczba; cin >> liczba; string tab; while( liczba ) { tab.insert( tab.begin(),( liczba & 1 ) + '0' ); liczba >>= 1; } cout << tab << endl; }
|
|
« 1 » |