C++ Zliczanie liczby jedynek w liczbie binarnej w jednym ciągu.

0

Witam potrzebuje prosty kod C++ w którym program. wymaga od nas wpisania liczby binarnej
wpisujemy liczbę binarną np: 101011110
i program zlicza nam największą liczbę jedynek w jednym ciągu (w przypadku tej liczby to będzie cztery 1).
jak na razie zrobiłem coś takiego:

#include <stdio.h>

int main()
{
    int n= 1, j = j+1;//deklaracja zmiennych  n - podana liczba, j liczba jedynek;

    printf("Podaj liczbe: ");
    scanf("%d", &n);//wczytywanie liczby

    while(n != 0)//pętla wykonująca się do momentu gdy n nie ma wartości 0
    {
            if(n % 2 == 1)//Jeżeli reszta z dzielenia przez 2 to jeden:
                j + 1;//do zmiennej suma dodajemy 1;

            n /= 2;//od n odejmujemy n/2
    }

    printf("Liczba jedynek po zamianie na system binarny to: %d", j);

    return 0;
}

tylko że ten program oblicza dziesiętne na binarne a nie wie jak go przekształcić aby robił jak wyżej chciałem.

3

#Wczytaj liczbę jako ciąg znaków.
#Stwórz sobie zmienne counter i max.
#Za każdym napotkaniem 1 zwiększasz counter.
#Za każdym napotkaniem 0 sprawdzasz czy counter > max, jeśli tak to nowym max jest wartość counter. Zerujesz counter.

int count(const std::string& number) {
    int max = 0, counter = 0;

    for(size_t i = 0; i < number.size(); ++i) {
        if(number[i] == '1') {
            ++counter;
        }
        else {
            max = std::max(max, counter);
            counter = 0;
        }
    }

    return std::max(max, counter);
}
1

Pomijam, że chyba inna jest treść, to:
1)

if(n % 2 == 1)//Jeżeli reszta z dzielenia przez 2 to jeden:

przy n jako int nie jest prawdą
2) liczenie przez porównywanie maski bitowej i przesunięcie bitowe lepiej może zostać zoptymalizowane.
3)

j + 1;//do zmiennej suma dodajemy 1;

nie zadziała jak w opisie

2
 int j = j+1;            

Interesująca konstrukcja. Trochę się zdziwiłem, że się kompiluje, niemniej bezsensowna.

 j + 1;//do zmiennej suma dodajemy 1;

Zamiast pisać takie komentarze należy porządnie nazwać zmienną, czyli suma a nie j.

0

Jakbyście mogli mi przedstawić to w postaci całego kodu c++ byłbym bardzo wdzięczny by mi to dużo pomogło (w sensie nauki , nie w sensie zrobienia zadania za mnie)

1

int j = j+1; - to nie będzie UB czasem?

0
#include <iostream>

using namespace std;

int main()
{
    cout << "podaj liczbe";
    int count(const std::string& number) {
    int max = 0, counter = 0;

    for(size_t i = 0; i < number.size() ; ++i) {
        if(number[i] == '1') {
            ++counter;
        }
        else {
            max = std::max(max, counter);
            counter = 0;
        }
    }
    cout << "Liczba jedynek w jednym ciagu to:"

    return std::max(max, counter);
}
}

czemu kompilator przy

 int count(const std::string& number) { 

wyznacza mi błąd??

1
Virhuan napisał(a):

czemu kompilator przy

int count(const std::string& number) { 

wyznacza mi błąd??

Ponieważ int count jest funkcją zaproponowaną przez kolegę, a Ty wstawiłeś definicję funkcji do kodu funkcji main?

1
Virhuan napisał(a):

czemu kompilator przy

int count(const std::string& number) { 

wyznacza mi błąd??

Zawsze pisz jaki błąd zwraca kompilator.

Ogólnie próbujesz deklarować funkcję wewnątrz main().

0

to w takim razie co tam zmienić aby było dobrze??.

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