liczby binarne oddzielone spacjami

0

Witam
Mam taki prosty programik:

#include <cstdlib>
#include <iostream>

using namespace std;

void dwojkowo(int liczba){
     int reszta = liczba % 2;
     static int licznik;

     if(liczba > 1){
               dwojkowo(liczba / 2);
               licznik++;//cout << licznik;
     }

     if(licznik%4==0)
               cout << " ";   
     cout << reszta;
}

int main(int argc, char *argv[])
{
    int a = 11767;
    dwojkowo(a);
    
    cin.get();
}

Co robię źle przy oddzielaniu kolejnych "czwórek" spacją?
Powinno wyjść tak: 10 1101 1111 0111
a jest tak: 1011 0111 1101 11
Pozdr.

0

przeciez liczby zaczynaja sie wyswietlac od lewej do prawej. Wiec jest dobrze. Jak chcesz osiagnac to co Ty musisz zrobic cos takiego

robisz sobie jakas zmienna bool (CzyDwaNieBylo) ustawiasz ja na true robisz ifa takiego

if (CzyDwaNieBylo && licznik % 2 == 0){
  cout << " ";
  CzyDwaNieBylo = false;
}

i pozniej lecisz jak teraz

och chyba zle zrozumialem. Dopiero teraz zauwazylem o co Ci chodzi. zamiast od razu to wypisywac to wpisz do stringa. Ze stringiem juz chyba powinienes sobie poradzic ;) (podpowiedz, zaczynaj od tylu jego formatowanie)

0

Mam nadzieje że rozumiesz bezsensowność robienia tego rekurencyjnie.

#include <iostream> 
using namespace std;
 
void dwojkowo(unsigned liczba,unsigned licznik=0)
  {
   if(liczba>1) dwojkowo(liczba>>1,licznik+1);  // liczba/2
   cout<<(" "+((licznik&3)!=3))<<(liczba&1)<<("\n"+(licznik>0)); // licznik%4, liczba%2
  }
 
int main()
  {
   dwojkowo(11767);
   return 0;
  }
0

Chciałem zrobić rekurencyjnie bo chcę opanować rekurencję a nic innego nie mogłem wymyślić.

1
demoo napisał(a):

Chciałem zrobić rekurencyjnie bo chcę opanować rekurencję a nic innego nie mogłem wymyślić.

Patryk27 napisał(a)

Wpychanie rekurencji wszędzie tam, gdzie się nie powinno nie jest dobrym sposobem na naukę.

*... a tym bardziej pytanie o to jak rozwiązać. *
Nie ma możliwości nauczenia się jazdy na rowerze poprzez oglądanie jak inni jeżdżą

3

Chciałem zrobić rekurencyjnie bo chcę opanować rekurencję a nic innego nie mogłem wymyślić.

Aby opanować rekurencję musisz jedynie opanować rekurencję.


Tak bardziej poważnie: w internecie jest od masy algorytmów stworzonych typowo rekurencyjnie, poszukaj zadań/algorytmów pod kątem `c++ recursion` ;)
0

rekurencja jest fajna np do przeszukiwania danej rzeczy w drzewie. Poszukaj sobie co to drzewo i napisz funkcje która będzie sumować wszystkie liczby od danego węzła drzewa

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