Potęgowanie dużych liczb

0

Drodzy forumowicze,
jak pewnie wielu z was zaczynam programować, zadań szukam na SPOJu. Tam znalazłem zadanie, w którym program ma wyświetlić cyfrę jedności z potęgi. Podajemy a i b i otrzymujemy liczbę a^b, i to właśnie tej liczby ostatnią cyfrę mamy otrzymać. Niby proste zadanie ()nawet dla laika jak ja) ale mam problem i nie rozumiem czemu dla a>10 coś się sypie, wynik obniżony jest o 1.

Np.: dla 11^2 otrzymuje 120 zamiast 121, 10^2 to 99 a nie 100. Tak teraz patrze ze mam błąd gdy podnoszę liczbę większa od 10 do potęgi nieparzystej...

Zależy mi na wskazaniu czemu moja wersja nie śmiga. Mimo, że może to być nie najbardziej optymalny sposób rozwiązania tego problemu.

#include <iostream>
#include <math.h>

using namespace std;
int nowe_a, nowe_b;
int ostatnia(int a, int b)
{
    int pot;
    int wynik;
    pot = pow(a, b);
    wynik = pot % 10;
    cout << wynik << endl;
}

int main()
{
    cin >> ilosc;
    for (int i = 1; i <= ilosc; i++)
    {
        cin >> nowe_a;
        cin >> nowe_b;
        ostatnia(nowe_a, nowe_b);
     }
  
    return 0;
}
1

Zadania na SPOJu wymagają przemyślenia - aby znać ostatnią cyfrę liczby a^b, wcale nie musisz wykonywać tego obliczenia na wszystkich cyfrach.

0

Wiem, że ostatnia cyfra całej potęgi to ostatnia cyfra potęgi ostatniej cyfry (mam nadzieje ze wiadomo co mam na myśli), jednak chce zrobić to w ten sposób jak powyżej.

0

Słyszałeś o operatorze modulo, i o tym, że można potęgować modulo?

0

Works for me: https://ideone.com/UmHc00

0

Pamiętaj też że w przypadku potęg ostatnia cyfra jest okresowa, więc w zasadzie wcale nie trzeba tej potęgi liczyć. Na przykład jeśli ostatnia cyfra podstawy to 0, 1 ,5 albo 6, to ostatnia cyfra potęgi będzie taka sama, niezależnie od tego do której potęgi kazali ci podnieść.

0

Jakieś hocki-klocki z kompilatorami i ucinaniem wyniku (szczegółów działania kompilatorów nie znam), zmień

int pot

na

float pot

oraz

wynik = pot % 10;

na

wynik = static_cast<int>(pot) % 10;

Najlepsze że raz działa poprawnie na intach za innym razem nie.

0

Dobra dziękuje wszystkim za pomoc, trochę mi zajęło aby zrozumieć błąd w swoim rozumowaniu. Podszedłem do tematu z innej strony i już mam optymalne (dla mnie) rozwiązanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1