Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

c++ - Duża potęga liczby 2.

biankapianka 10 Gru 2014 16:29 924 7
  • #1 10 Gru 2014 16:29
    biankapianka
    Poziom 2  

    Napisałem program liczący duże do 1000 000 potęgi liczby 2. W wyniku wyświetla się ostatnia cyfra (takie były założenia programu), jednak program jest za wolny i przekracza ustalony czas.Jak mogę go usprawnić???
    Oto mój kod:



    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0 7
  • #2 10 Gru 2014 17:08
    penknife
    Poziom 20  

    taka mała podpowiedź, jeśli potrzebujesz tylko ostatniej cyfry:
    2^0=1
    2^1=2
    2^2=4
    2^3=8
    2^4=16
    2^5=32
    2^6=.4
    2^7=..8
    2^8=..6

    tuż za else:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #3 10 Gru 2014 17:56
    Dżyszla
    Poziom 42  

    Sekundę, ale gdzie jest ta potęga?
    Ja tu widzę ciąg
    2 * 2 = 4; 4%10 = 4
    4 * 2 = 8; 8%10 = 8
    8 * 2 = 16; 16%10 = 6
    6 * 2 = 12...

    A na marginesie, potęgowanie liczby 2 to nic innego jak przesunięcie bitowe o 1 w lewo, które jest 20 razy szybsze od mnożenia.

    0
  • Pomocny post
    #4 10 Gru 2014 18:04
    penknife
    Poziom 20  

    a że autor wątku potrzebuje tylko cyfry -wartości mniejszej od 10(dec), która mieści się w 4 bitach

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    PS. tak poza tym Dżyszla jak sobie wyobrażasz potęgę 100000 liczby 2 na maszynie o maksymalnej obsłudze 128bitów (procesor 64bity)

    PPS. sorki za te kilka poprawek, po przetestowaniu na kompilatorze mam pewność że teraz będzie działać poprawnie

    0
  • #5 10 Gru 2014 20:18
    mcvsama
    Poziom 15  

    Może sobie wyobrazić za pomocą GMP. ;-)

    Co do mnożenia - nie ma obaw. Przy włączonych jakichkolwiek optymalizacjach kompilator sam zamieni x * 2 na przesunięcia bitowe.

    0
  • #6 10 Gru 2014 22:47
    biankapianka
    Poziom 2  

    Dziękuję wszystkim za zainteresowanie moim programem. Szczególny hołd składam penknife. Po drobnych poprawkach program działa. Zmieniłem if ( n>4 na n>=1, nie liczył potęg od 1 do 4. Ostateczny kod

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #7 11 Gru 2014 00:20
    penknife
    Poziom 20  

    sorki dopiero teraz dostrzegłem (i poprawiłem): uciekł mi nawias klamrowy zamykający w linii za if (n>4)

    0
  • #8 11 Gru 2014 10:10
    biankapianka
    Poziom 2  

    Dziękuję serdecznie :D

    0