Liczby binarne\dziesiętne

0

Witam.

Przechowuję w programie bardzo duże liczby całkowite w postaci binarnej (zaimplementowałem do tego tablicę bitów) i chciałbym móc wypisać na ekran tą moją liczbę, ale w postaci dziesiętnej. Jest w ogóle taka możliwość? Nie mogę zwyczajnie policzyć wartości tej liczby do jakiegoś inta/longa i następnie to wypisać, bo w zakresie się nie zmieści.
Oczywiście muszę to zrobić bez żadnych niestandardowych bibliotek.

Macie jakieś pomysły?

Pozdrawiam

0

a czy potrafisz podzielić przez 10 tą swoją liczbę?

0

Jedyne sensowne rozwiązanie jakie teraz przychodzi mi na myśl to operacje na łańcuchach. Najpierw musiałbyś zrobić jakąś funkcję która przyjmuje jako parametry bit i jego indeks w Twojej tablicy bitów i zwraca liczbę zapisaną jako łańcuch. Potem w pętli przeliczasz wartości wszystkich bitów i je sumujesz (do tego potrzebna funkcja sumująca dwie liczby zapisane w formie łańcuchów).

@Xitami: po co ją dzielić przez 10?

0

Te dzielenie przez 10 to raczej sensu nie ma. Przecież każdy bit tej liczby(np. 1000 cyfrowej) może zmienić wartość niemalże każdego bitu

0

Ok, czyli masz np "11101010101", a chcesz reprezentację dziesiętną, tak? No to napisz sobie klasę, która będzie przechowywać liczby w reprezentacji tekstowej "123", zaimplementuj mnożenie i dodawanie - i konwertuj w pętli, jak na papierze. ;) Przynajmniej dopóki nie znajdziesz wydajniejszego sposobu.

1

No właśnie. Nie wiem w ogóle skąd jakiekolwiek dzielenie. Zamiana liczby zapisanej w systemie dwójkowym na dziesiętny sprowadza się do dodania do siebie wszystkich bitów pomnożonych razy 2 do potęgi n, gdzie n jest indeksem bitu numerując od zera zaczynając na najmniej znaczącym bicie. Jeśli zamiast 2 podamy liczbę cyfr w wybranym systemie pozycyjnym, to otrzymamy wzór pozwalający zamienić liczbę z dowolnego systemu na 10. Dzielenie mamy przy sytuacji odwrotnej, tylko, że wtedy dzielimy liczbę przez ilość cyfr w danym systemie. Dzielenie przez 10 jest tutaj trochę bez sensu, bo z tego wynika, że zamienialibyśmy liczbę dziesiętną na dziesiętna.

0

pomyślałem o czymś takim:

int podziel(WIELKALICZBA * wielka, int n, int * reszta);
// *wielka := *wielka / n
// *reszta := *wielka % n
// return *wielka != 0

bin2dec(WIELKALICZBA * wielka){
	int reszta=0;
	if(podziel(wielka, 10, &reszta)
		bin2dec(wielka);
	cout<<(char)(reszta+'0');
} 

Zawoła się trunc(ilebitów(wielka)*log(2)/log(10)+2) razy

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