7 / 7
Mar 2017

Witam. Stawiam pierwsze kroki w C++ Sędzia mi mówi że przekroczyłem czas wykonania a ja nie bardzo widzę pole do optymalizacji:
Mój kod:

int x=0;
unsigned long int silnia=1;
unsigned int n=1;
cin >> x;
for (x; x>0;x--)
{
    cin >> n;
    for(int i=n;i>1;i--) silnia*=i;
    cout << silnia / 10 % 10 << " " << silnia % 10 << endl;
}

Proszę o wskazówki

  • created

    Mar '17
  • last reply

    Mar '17
  • 6

    replies

  • 532

    views

  • 2

    users

  • 2

    links

Wskazówki:
1. Sprawdzić zakres pojemności typów prostych zmiennych języka C++.
2. Oszacować jak szybko te typy zostaną przepełnione przy operacjach liczenia silni.
3. Przeczytać dokładnie treść zadania ze szczególnym uwzględnieniem zakresu danych wejściowych dla których chcemy liczyć silnię.
4. Porównać wnioski z pkt.2 z wnioskami z pkt.3
5. Skorzystać z wyszukiwarki na forum SPOJa i przeczytać 28 wątków odnośnie tego zadania.

A gdyby chodziło o dwie ostatnie niezerowe cyfry silni to poradziłbyś sobie?

nie w sekundowym limicie czasu, poza tym wartość 999! już przekracza zakres jakiegokolwiek typu danych