• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ dec_to_bin i sumowanie jedynek

Object Storage Arubacloud
0 głosów
1,118 wizyt
pytanie zadane 25 marca 2018 w C i C++ przez pierwszyrazcplusplus Nowicjusz (210 p.)
edycja 25 marca 2018 przez pierwszyrazcplusplus
#include <iostream>

using namespace std;

void dec_to_bin (int liczba)
{
	int i = 0, tablica [31];
	while (liczba != 0)
	{
		tablica[i++] = liczba%2;
		liczba/=2;
	}
	for (int j=i-1;j>=0;j--)
		cout<<tablica[j];
}
int main()
{
	
	int dec;
	cin>>dec;
	dec_to_bin(dec); 
	
	return 0;
}

Algorytm realizujacy zamiane liczb dziesietnych na binarną. Teraz moim zadaniem jest policzyc ile jedynek jest w liczbie binarnej, wyświetlić  je i zsumowac (suma jedynek ma byc w postaci decymalnej, tj. jesli 101 (dwie jedynki) = 2 ). Nie mam pojecia jak sie za to zabrac :C Help

1 odpowiedź

+1 głos
odpowiedź 25 marca 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
wybrane 25 marca 2018 przez pierwszyrazcplusplus
 
Najlepsza
#include <numeric>
// ...
std::cout << std::accumulate(tablica, tablica + i, 0) << '\n';

 

komentarz 25 marca 2018 przez pierwszyrazcplusplus Nowicjusz (210 p.)
Jeszcze tylko jakby była możliwość wyświetlenia tylko jedynek np: 120 = 1111000,

to zamiast 1111000, tylko 1111.
komentarz 25 marca 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
To w pętli przy wyświetlaniu dodaj odpowiedniego ifa.
komentarz 25 marca 2018 przez pierwszyrazcplusplus Nowicjusz (210 p.)
już, doszedłem. Dziękuję za pomoc :)
komentarz 25 marca 2018 przez mokrowski Mędrzec (155,460 p.)

@Qwerty96, std::accumulate ? Niby można ale ciężkie.

Prosta wręcz kanoniczna (ale nie najszybsza) wersja:

#include <iostream>

template<typename T>
unsigned short count_set_bits(T value) {
    unsigned short counter{};
    do {
        if(value & 0x01) {
            ++counter;
        }
    } while(value >>= 1);
    return counter;
}

int main() {
    int value = 42;
    auto counter = count_set_bits(value);

    std::cout << "Liczba " << value << " zawiera "
        << counter << " bitów ustawionych jako 1.\n";
}

Można jeszcze szybciej ale będą to operacje masek bitowych które dla niektórych są ciężkie do zrozumienia. Plusem rozwiązania powyżej jest brak koniecznej jawnej konwersji na jakiekolwiek prezentacje bitowe.

Podobne pytania

0 głosów
0 odpowiedzi 371 wizyt
pytanie zadane 28 grudnia 2016 w Matematyka, fizyka, logika przez qlucha Obywatel (1,790 p.)
+2 głosów
0 odpowiedzi 3,928 wizyt
pytanie zadane 20 września 2016 w Algorytmy przez niezalogowany
0 głosów
1 odpowiedź 9,109 wizyt
pytanie zadane 17 października 2016 w C i C++ przez kakola3 Początkujący (270 p.)

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...