• 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

0 głosów
1,432 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 (158,940 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 440 wizyt
pytanie zadane 28 grudnia 2016 w Matematyka, fizyka, logika przez qlucha Obywatel (1,790 p.)
+2 głosów
0 odpowiedzi 4,467 wizyt
pytanie zadane 20 września 2016 w Algorytmy przez niezalogowany
0 głosów
1 odpowiedź 9,388 wizyt
pytanie zadane 17 października 2016 w C i C++ przez kakola3 Początkujący (270 p.)

93,631 zapytań

142,553 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2459p. - CC PL
  9. 2184p. - Maurycy W
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1811p. - rafalszastok
  13. 1600p. - Rafał Trójniak
  14. 1588p. - Tomasz Bielak
  15. 1494p. - ssynowiec
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...