Programowanie i algorytmy

Kolejne potęgi liczby 2

Zad. 3. Napisz program, który wyświetli n kolejnych potęg naturalnych liczby 2.

 

Rozwiązanie klasyczne

2 do potęgi 0 jest równe 1, czyli taka musi być wartość początkowa zmiennej "potega". Przy każdym przejściu pętli, wartość zmiennej "potega" jest przemnażana przez 2 i w ten sposób otrzymujemy kolejne potęgi liczby 2. Pętla wykona się n razy.

#include <cstdlib>
#include <iostream>
using namespace std;
 
int main()
{
  unsigned int n;
  unsigned long long potega = 1;
 
  cout<<"Podaj n: ";
  cin>>n;
 
  system("cls");
 
  for(int i = 0;i<n;i++)
  {
    cout<<"2 do potęgi "<<i<<" wynosi "<<potega<<endl;
    potega*=2;
  }
 
  system("PAUSE");
  return 0;
}
 

 

Rozwiązanie przy użyciu operatorów przesunięcia bitowego

Zauważmy, jak przedstawiają się kolejne potęgi liczby 2 (na jednym bajcie) przedstawione w postaci binarnej:

 

dziesiętnie binarnie
20=1 00000001
21=2 00000010
22=4 00000100
23=8 00001000
24=16 00010000
... ...

 

Widzimy na przykładzie powyżej, że wystarczy przesuwać przy każdym przejściu pętli o jeden bit w lewo, aby otrzymać kolejne potęgi liczby 2. Do tego zadania posłuży nam operator przesunięcia bitowego w lewą stronę:

#include <cstdlib>
#include <iostream>
using namespace std;
 
int main()
{
  unsigned int n;
  unsigned long long potega = 1;
 
  cout<<"Podaj ilość kolejnych potęg liczby 2 do wyświetlenia: ";
  cin>>n;
 
  for(int i = 0;i<n;i++, potega<<=1)
    cout<<"2 do potęgi "<<i<<" wynosi "<<potega<<endl;
 
  system("PAUSE");
  return 0;
}