Kurs maturalny z języka angielskiego!
kurs-maturalny-jezyk-angielski

PROGRAMOWANIE I ALGORYTMY

Zajęcia maturalne z informatyki
Olimpiada Informatyczna Juniorów
    Prowadzący: Marcin Kasprowicz
  • właściciel serwisu algorytm.edu.pl
  • wrzesień 2024 — start zajęć
  • czytaj więcej

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

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