Witam,
mam problem z algorytmem silnia, testowałem wersje iteracyjną jak i wersję rekurencyjną, ale obie przekraczają limit, moje pytanie brzmi, jak jest zoptymalizować aby nie wyrzucały błędu "przekroczono limit wykonania".
Program ma za zadanie, wyświetlić liczbę dziesiątek i jednostek w silni, która zostaje obliczona.
http://pl.spoj.com/problems/FCTRL3/
z gory dzieki za pomoc :)
#include <iostream>
// zadanie spoj -> dwie cyfry silni
// kod zadania: FCTRL3
using namespace std;
long long silnia_iter(long long n) {
long long wynik = 1;
for(unsigned long i = n; i > 0; --i) {
wynik *= i;
}
return wynik;
}
long long silnia_rek(long long n) {
if(n == 0) return 1;
else return n * silnia_rek(n - 1);
}
int dziesiatki(long long n) {
return (n / 10) % 10;
}
int jednostki(long long n) {
return n % 10;
}
int main() {
int t;
long long n;
long long nSilnia;
cin >> t;
if((t >= 1) && (t <= 30)) {
for(int i = 0; i < t; ++i) {
cin >> n;
if(n >= 0 && n <= 1000000000) { // lol
nSilnia = silnia_rek(n); // wynik silni dla n
cout << dziesiatki(nSilnia) << " " << jednostki(nSilnia) << endl;
}
}
}
return 0;
}