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;
}
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 <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;
return 0;
}