SPOJ - Dwie cyfry silni - Przekroczono limit czasu

0

Witajcie koledzy i koleżanki!
Próbuję napisać program, który liczy silnię i wyświetla wynik w określonej formie: http://pl.spoj.com/problems/FCTRL3/
Cały czas otrzymuję błąd o przekroczeniu limitu czasu. Nie potrafię już bardziej zoptymalizować mojego kodu:

int main() {
	int d;
	scanf("%d", &d);
	
	for (int i=0;i<d;++i){
	
		int n;
		scanf("%d", &n);
	
		int a, b, result;
		result=1;
		for(int z=1; z<=n; ++z){
			result=result*z;
		}
		a=result/10;
		b=result%10;
		printf("%d %d", a, b);	
	}		
	
	return 0;
}

Chciałbym zaznaczyć, że jestem początkującym. Dziękuję :)

3

n jest duże, więc bieganie po wszystkich liczbach od 1 do n w pętli jest niefektywne.
Wyobraź sobie, że pytają tylko o ostatnią cyfrę. Ile jest możliwych wyników? Czy da się policzyć ten wynik bez użycia pętli?
A teraz rozszerz to do dwóch ostatnich cyfr.

4

Weź do ręki kartkę papieru i wypisz sobie ile wynosi silnia dla kolejnych 20 liczb. Następnie popatrz na cyfrę dziesiątek oraz jedności i wyciągnij wnioski.

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