• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Potęga dwójki

Cloud VPS
0 głosów
2,083 wizyt
pytanie zadane 22 marca 2017 w C i C++ przez Undisputed Gaduła (3,040 p.)

Witam.

Mam problem (jakże dość prostym) zadaniem.

Treść zadania

Mój kod:

#include <iostream>

using namespace std;

int main()
{
    long long n,wynik=2;
    cin >> n;
    if(n>=0)
    {
        if(n==0)
        {
            wynik=1;
        }
        else
        {
            for (int i=1; i<n; i++)
            {
                wynik=2*wynik;
            }
        }
    }
    cout << wynik%10;
    return 0;
}

Wg mnie jest wszystko dobrze, jednak sędzia odrzuca mój program. 

Za wskazówki będę bardzo wdzięczny.

1 odpowiedź

0 głosów
odpowiedź 22 marca 2017 przez CzikaCarry Szeryf (75,340 p.)
wybrane 22 marca 2017 przez Undisputed
 
Najlepsza
Tutaj nie chodzi o liczenie całej liczby( 2^10^18 to bardzo dużą liczba. Nie mieści się w longu ani żadnym innym typie z iostream). Tutaj chodzi o znalezienie zależności między kolejnymi wynikami potęg. To zadanie można rozwiązać przy użyciu jednego modulo i jednego switcha. Więcej nie mogę powiedzieć. Powodzenia!
komentarz 22 marca 2017 przez Dexterim Dyskutant (8,370 p.)
Możesz zawsze dopowiedzieć, żeby sobie wypisal kilka potęg dwójki :)
komentarz 22 marca 2017 przez Undisputed Gaduła (3,040 p.)
Ok, zaraz pomyślę.
komentarz 22 marca 2017 przez Undisputed Gaduła (3,040 p.)
Dziękuję, a jeszcze pytanie, moje rozwiązanie było dobre, prawda?

Tylko nie obejmowało zbyt wielu liczb, tak ?
komentarz 22 marca 2017 przez CzikaCarry Szeryf (75,340 p.)

Rozwiązanie w teorii może działać, ale:

  • Jest bardzo wolne (w pesymistycznym przypadku po zaimplementowaniu odpowiedniego typu liczenie tej liczby zajęłoby bardzo dużo czasu. Obliczanie tej liczby na normalnym komputerze na pewno nie skończyłoby się dzisiaj, jutro też nie, możliwe, że za miesiąc też nie)
  • Typy których używasz nie pomieszczą liczby 2^10^18 :)
komentarz 23 marca 2017 przez niezalogowany
edycja 23 marca 2017
#include <iostream>

int main()
{
	long long int n;
	
	std::cin >> n;

	if (n == 0)
	{
		std::cout << 1 << std::endl;
	}
	else
	{
		while (n > 4)
		{
			n -= 4;
			if (n <= 4)
				break;
		}

		switch (n)
		{
		case 1: std::cout << 2 << std::endl; break;
		case 2: std::cout << 4 << std::endl; break;
		case 3: std::cout << 8 << std::endl; break;
		case 4: std::cout << 6 << std::endl; break;
		}
	}

	return 0;
}

W takim razie dlaczego to rozwiązanie jest błędne?

komentarz 23 marca 2017 przez CzikaCarry Szeryf (75,340 p.)
Twoje rozwiązanie jest bardzo wolne. Użyj modulo zamiast pętli.

Podobne pytania

0 głosów
1 odpowiedź 1,170 wizyt
0 głosów
1 odpowiedź 171 wizyt

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,837 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...