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

Potęga dwójki

Object Storage Arubacloud
0 głosów
1,691 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ź 890 wizyt
0 głosów
1 odpowiedź 101 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...