Krump Temat założony przez niniejszego użytkownika |
Konwersja z binarnego na dziesiętny. » 2011-11-28 19:35:57 Witam, mam problem z konwersja liczby z systemu binarnego na dziesiętny, nie ma errorów, ani warningów ale źle liczy, co jest źle w tym algorytmie, bo idea jest dobra ;/ Zależy mi na czasie :) string bin; int dec, dlugosc, i; bin = 11011; //dziesietnym 27 dec = 0; dlugosc = bin.length() - 1; i = 0; do { dec += bin[dlugosc] * pow( 2, i ); i++; dlugosc--; } while( dlugosc > 0 );
|
|
akwes |
» 2011-11-28 19:48:49 Źle liczy czyli co? Może liczba jest odwrócona (nie analizowałem jeszcze Twojego kodu, no ale jak mówisz że chodzi o czas :) |
|
Krump Temat założony przez niniejszego użytkownika |
» 2011-11-28 19:52:02 dla tego 11011 powinno być 27 w dziesiętnym a podaje 3 xD a dla np 11 gdzie w dziesiętnym jest 3 podaje 2 xD |
|
akwes |
» 2011-11-28 19:54:03 dec += bin[ dlugosc ] * pow( 2, i );
bin[dlugosc] != 0 oraz != 1 :P A to dlatego że bin[dlugosc] zwraca char. Kompilator niejawnie rzutuje char na int. A LITERKA "1" w ASCII ma inny kod niż "1", tak samo z zerem. Zobacz jaka jest różnica w kodach ASCII :P // Wygląda na to że różnica to 48 czyli np. char litera = 48; cout << litera;
0
A w momencie char == int masz coś takiego char litera = "a"; cout << litera; cout <<( int ) litera;
|
|
Krump Temat założony przez niniejszego użytkownika |
» 2011-11-28 19:56:42 No dobra ale jak to przerobić żeby było dobrze, myślałem że usunąłem ten błąd przy zliczaniu liczby znaków i odjęciu jedynki bo zaczęciu od i = 0; |
|
akwes |
» 2011-11-28 19:59:17 Odjąć różnicę :P ? jednak nie xD Jednak też, ale nie tylko. Widzę że to jest kilka błędów chodziło Ci o string bin; bin = "11011";
? |
|
Krump Temat założony przez niniejszego użytkownika |
» 2011-11-28 20:05:55 apropo ascii jak robiłem na polindromy to nie było problemu z tym, błąd musi być w algorytmie
po poprawie tego "" wyliczył 731 o 704 za dużo xD |
|
akwes |
» 2011-11-28 20:08:00 string bin; int dec, dlugosc, i; bin = "11011"; dec = 0; dlugosc = bin.length(); i = 0; do { cout << bin[ dlugosc - 1 ]; dec +=( bin[ dlugosc - 1 ] - 48 ) * pow( 2, i ); i++; dlugosc--; } while( dlugosc > 0 );
cout << '\n' << dec;
Policzyło mi 27. Może zbieg okoliczności :P Chociaż na innych też działa. Ale w palindromach nie liczyłeś nic na char, tylko zmieniałeś miejscami. A tutaj mnożysz wartość char. A trzeba zastosować konwersję CharToInt(), ktora zrobi to z sensem, tutaj wystarczy dać "-48", taka konwersja na szybko :P Warto sobie często wyświetlać zmienne. Gdybyś wyświetlał cout << bin[ dlugosc - 1 ]; zauważyłbyś że wychodzą serduszka inne krzaki, czyli że był źle inicjalizowany string. A potem to myślę że byś trafił że coś mnoży za duże liczby :P |
|
« 1 » 2 3 |