Zadanie z silni na SPOJ - zbyt długie wykonywanie programu

0

Noż kurde co ja tu źle zrobiłem??? Spoj mi wyrzuca że za długo wykonuje się program:
http://pl.spoj.com/problems/FCTRL3/

#include <iostream>

using namespace std;
int factorial(int number){
	if (number == 1) return number;
	int s = 1;
	for (int i = 2; i <= number; i++){
		s *= i;
	}
	return s;
}

int main() {
	int test;
	cin >> test;
	int * tab = new int[test];
	int input = 0;
	for (int i = 0; i < test; i++){
		cin >> input;
		tab[i] = factorial(input);
	}

	int liczbaDziesiatek;
	int liczbaJednosci;
	for (int i = 0; i < test; i++){
		liczbaDziesiatek = tab[i] / 10; //srry nie wiem jak to po angielsku jest wiec po polsku napisze zmienną 
		liczbaJednosci = tab[i] % 10;
		cout << tab[i] << endl;
		cout << liczbaDziesiatek << " " << liczbaJednosci << endl;
	}
	return 0;
}
1

Było wielokrotnie...
W tym zadaniu wcale nie musisz liczyć silnii. Rozpisz sobie na kartce silnię do 15 i zobaczysz.

0
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10!= 3628800
11!= 39916800
12!= 479001600
13!= 6227020800
14!= 87178291200
15!= 1307674368000

No dobra to stworzyłem warunek ze liczy silnie do 9 pozniej już zwraca 0, lecz spoj teraz wyrzuca błędną odpowiedź :)

0

A gdzie kod dający błędną odpowiedź? Daj go na forum to się popatrzy gdzie masz błąd.

0

liczba dzisiątek dla liczby 1000 to według twojego kodu 100

0

Dobra zaakceptowane stawiam kod moze komus sie przyda :

#include <iostream>

using namespace std;
int factorial(long number){
	if (number <= 1) return 1;
	int s = 1;
	if (number <= 9){
		for (int i = 2; i <= number; i++){
			s *= i;
		}
		return s;
	}
	return 0;
}



int main() {
	int test;
	cin >> test;
	int * tab = new int[test];
	long input = 0;
	for (int i = 0; i < test; i++){
		cin >> input;
		tab[i] = factorial(input);
	}

	int liczbaDziesiatek;
	int liczbaJednosci;
	for (int i = 0; i < test; i++){
		liczbaDziesiatek = (tab[i] % 100) / 10;
		liczbaJednosci = tab[i] % 10;
		cout << liczbaDziesiatek << " " << liczbaJednosci << endl;
	}
	delete(tab);



	return 0;
}
0

Tak na przyszłość - zainteresuj się funkcjami printf i scanf do wczytywania i wypisywania danych (są szybsze, co się przydaje na SPOJ'u w zadaniach z okrojonym limitem).

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