Zrobiłem zadanie z serwisu SPOJ ostatnia niezerowa funkcja silni. Wyskakuje mi przekroczono limit czasu i nie mam pomysłu jak zoptymalizować algorytm. Link do zadania: http://pl.spoj.com/problems/OSTSIL/
#include <iostream>
using namespace std;
//funckja obliczajaca wartosc silni
unsigned long long obliczSilnia(int a) {
if (a==1) return 1;
else return a*obliczSilnia(a-1);
}
int main() {
//zmienne oznaczajace liczbe testow oraz liczbe w danym tescie
int t, liczba;
//wczytanie wartosci liczby testow
cin >> t;
//petla ktora wykona wszystkie testy
for (int i = 0; i<t; i++) {
//wczytanie wartosci liczby dla danego testu
cin >> liczba;
//zmienna przechowujaca wartosc silni
unsigned long long silnia = obliczSilnia(liczba);
//obciecie zer stojacych z tylu liczby
while (silnia/10*10==silnia) {
silnia /= 10;
}
//wypisanie ostatniej niezerowej cyfry silni
cout << silnia%10 << endl;
}
return 0;
}