"Czy umiesz potęgować" - zadanie ze spoj'a

0

Wiem, że pojawił się gdzieś kiedyś taki wątek na temat tego zadania, ale podszedłem do niego ciutke inaczej. Ogólnie kod chodzi dobrze i wyniki są poprawne, jednak spoj wyrzuca mi przekroczenie limitu czasowego. I moje pytanie brzmi: Czy można rozwiązać ten problem w podobny sposób, czy musze jednak zrobić to inaczej, aby zmieścić sie w limicie czasowym ?

#include <iostream>
#include <sstream>

using namespace std;


int potegowanie ( int a, int b)
{
    if(b==0)
    {
    return 1;
    }
    else
    {
        return a * potegowanie(a, b-1);
    }

}


void wypisz(int a, int b)
{
    int num = potegowanie(a,b);

    ostringstream buf;
    buf << num;
    string str = buf.str();
    cout << str[str.size()-1];

}





int main()
{
    int d;

    cin >> d;
    int podstawa [d];
    int wykladnik [d] ;

    int i;

    for (i=0; i<d; i++)
    {
        cin >> podstawa [i] >> wykladnik[i];

    }

    for (i=0; i<d; i++)
    {
        wypisz(podstawa[i],wykladnik[i]);
        cout << endl;

    }

    return 0;
} 
2

Przeczytaj treść zadania i zastanów się, czy gdzieś tam jest mowa o potęgowaniu, a potem rozpisz sobie na kartce potęgi liczb od 1 do 1000 i spróbuj pomyśleć.

0

Wiem że cyklicznie powtarzają się cyfry jedności, jednak uzycie konwersji na stringa wydawała mi się być nieco bardziej przejrzyste i proste aniżeli drabinka if'ów z użyciem modulo.

0
  1. VLA nie ma w C++
  2. nie potrzebujesz pamiętać wszystkich linii wejściowych. Tablice są zbędne
  3. Zapoznaj się z operatorem modulo - %
  4. integer overflow to UB w C++ - a do tego jest Ci to zupełnie zbędne, bo potrzebujesz tylko ostatnią cyfrę
  5. Nie rozumiem dlaczego ludzie nazywają funkcje odrzeczownikowo (pomijając już nieangielskie nazewnictwo). Dlaczego potegowanie a nie poteguj? I dlaczego niekonsekwentnie nie ma wypisywanie?
  6. Moja wersja w D wykonuje się w 0.00, może coś Ci podpowie: https://github.com/KrzaQ/mySPOJ/blob/master/PA05_POT%20-%20Czy%20umiesz%20pot%C4%99gowa%C4%87/main.d

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