Polski SPOJ rozwiązanie zadania

0

Siemka, chciałem rozwiązać zadanie z polskiego SPOJA z działu łatwe ,, Czy umiesz potęgować?", kiedy załączyłem plikk z kodem źródłowym i wysłałem w rozwiązaniu, niestety wyniku jest napisane ,,przekroczono limit czasu" . Chodzi tutaj o to, że program jest za wolny, bo źle go skonstruowałem? Nie ukrywam, że zrobiłem go prymitywnie i bez wyobraźni, ale myślałem, że jakoś pójdzie. Jak waszym zdaniem powinno to wyglądać i co jest do poprawienia i zmiany? Tutaj daje link do zadania: http://pl.spoj.com/problems/PA05_POT/ A tutaj kod źródłowy:
<
#include<iostream>
using namespace std;
int potega(int a,int b)
{
if (b==0)return 1;
else
return a=a*potega(a,--b);
}
int D=0;
int main()
{
int a,b;
long mn[10];
cin>>D;
int x=0;
while(x<D)
{
cin>>a>>b;
a=a%10;
mn[x]=potega(a,b)%10;
x=x+1;
}
int y=0;
while(y<x)
{
cout<<mn[y]<<endl;
y=y+1;
}
return 0;
}

P.S: Nie wiem czy kod dodałem do postu w dobry sposób, jak coś to porawcie mnie, bo wcięcia kodu poginęły jak dodałem post.

0

Pięknie.

1

Masz naiwny algorytm, dlatego masz błąd. Nie bez przyczyny masz zwrócić tylko cyfrę jedności z potęgowania. Do tego, jeszcze ta rekurencja :D. Po drugie, nie musisz na spoju tablicować wyników, dla n przypadków wejściowych. Raczej realizuje się to w taki sposób:

std::cin>>D;
while(D--) {
  //Wczytaj dane
  //Przetwórz dane
  //Wypisz wynik
}

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