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