Odwracanie liczby

0

Mam takie zadanie: wczytać liczbę dziesiętną, odwrócić kolejność jej cyfr dwójkowych bez zer nieznaczących, i tak odwróconą liczbe wypisać w systemie dziesietnym. np. 22 - 13.

najprostszy sposób na jaki wpadłem:

  1. zamienić liczbe na dwójkową
  2. odwrócić bity
  3. zamienić z powrotem na dziesiętną

Jednak troche to żmudna operacja. Czy istnieje możliwość szybszego wykonania tego problemu??

0
hebius napisał(a)

najprostszy sposób na jaki wpadłem:

  1. zamienić liczbe na dwójkową
  2. odwrócić bity
  3. zamienić z powrotem na dziesiętną

punkty 1. i 3. nie są potrzebne - liczby w pamięci programu (w zmiennych) są zawsze binarne.

uint rev(uint v)  // uint = unsigned
{
  uint r;
  for(r = 0; v != 0; v >>= 1) 
       r = (r << 1) | (v & 1);
  return r;
}


// w main lub ...

cout << " 6 -> " << rev(6);  // 3
cout << "22 -> " << rev(22); 

To wszystko. :)

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