1 / 7
Apr 2020

link do zadania: https://pl.spoj.com/problems/PA05_POT/2
nie wiem dlaczego ale, jak wpisuje do podstawy 5 a do wykładnika 2 to zwraca mi 4
kod:
#include
#include

using namespace std;

int main()
{
int liczba;
cin >> liczba;
int * podstawa = new int [liczba];
int * wykladnik = new int [liczba];
for (int i = 0; i<liczba;i++)
{
cin >> podstawa[i] >> wykladnik[i];
}
int wynik;
int wyk, pod;
for(int i = 0; i<liczba;i++)
{
pod=podstawa[i];
wyk = wykladnik[i];
wynik = pow(pod,wyk);
cout << wynik%10 << endl;
}

return 0;

}

  • created

    Apr '20
  • last reply

    Apr '20
  • 6

    replies

  • 820

    views

  • 3

    users

  • 2

    likes

  • 3

    links

O przepraszam i dziękuję,a czy wiesz czym może to być spowodowane, że zwróciło mi 4 I czy 5 do potegi 999999 to wystarczy zmiana typu, czy poprostu wykombinowania jakoś tego ?

Zmiana typu niestety nie pomoże. Trzeba coś wykombinować, zauważyć. Na forum było wiele razy.
dla podstawy 5 jest łatwo bo, 5 do potęgi 0 jest 1, natomiast dla większych potęg liczba jedności będzie 5. Dla innych podstaw nie jest tak łatwo.
EDIT:
Co spowodowało że wyskoczyło 4? Nie mam pojęcia może jakaś inna wersja programu tak zwracała.

Taka drobna uwaga, w swoim kodzie nie zwolniłeś pamięci po jej alokacji. Ja wiem, ze to nie jest motywem przewodnim kodu, ale chyba lepiej nie dawać złego przykładu… :slight_smile:

a to nie jest tak, że można tego nie robić, na przykład jak to obejmuje cały program to wraz z zakończeniem programu pamięć zostanie zwolniona, oczywiście wiem, że przy dłuższych programach należy to zrobić, ale dziękuję za uwagę, oraz poświęcony czas.

Oczywiście, że kończąc program zwalniasz zaalokowaną pamięć tylko wcześniej może ci się wysypać program przez brak pamięci :slight_smile: . Lepiej pamięć zwracać od razu gdy nie jest już potrzebna, i lepiej mieć ten nawyk nawet dla progamów, o których wiemy, ze nie wyczerpią pamięci.