• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Spoj, Dwie cyfry silni

Object Storage Arubacloud
0 głosów
2,277 wizyt
pytanie zadane 18 marca 2017 w C i C++ przez Roman Piwek Nowicjusz (120 p.)

Niech n będzie nieujemną liczbą całkowitą. Liczbę n! (czytaj n-silnia) definiuje się następująco. Jeśli n ≤ 1, to n! = 1. Dla n > 1, n! jest równe iloczynowi wszystkich liczb od 1 do n, czyli n! = 1 * 2 * ... * n. Na przykład 4! = 1*2*3*4 = 24.

Zadanie
Napisz program, który:

  • wczyta ze standardowego wejścia nieujemną liczbę całkowitą n,
  • policzy cyfrę dziesiatek oraz cyfrę jedności w zapisie dziesiętnym liczby n!,
  • wypisze wynik na standardowe wyjście.

Wejście
W pierwszej linii wejścia znajduje się jedna liczba całkowia D (1≤D≤30), oznaczjąca liczbę przypadków do rozważenia. Opis każdego przypadku składa się z jednej linii, w której znajduje się jedna nieujemna liczba całkowita n (0 ≤ n ≤ 1 000 000 000).

Wyjście
Dla każdego przypadku z wejścia. Twój program powinien wypisać w osobnej linii dokładnie dwie cyfry (oddzielone pojedynczą spacją): cyfrę dziesiątek i cyfrę jedności liczby n! zapisanej w systemie dziesiętnym.

Przykład
Dla danych wejściowych:

2
1
4

poprawną odpowiedzią jest:

0 1
2 4

Przepraszam wiem że nie należy zadawać tu takiego pytania z kodem. To jest mój pierwszy program dla SPOJ-a. I mam wrażenie ze to portal dla masochistów. Nie wiem dlaczego sędzia nie akceptuje mojego rozwiązania. Jeśli jest możliwość, po dostaniu właściwej odpowiedzi skasuję swój kod.
 

#include <iostream>

using namespace std;

int main()
{
    int liczba;
    long long int silnia = 1;

    cin >> liczba;

    if (liczba >= 1)
    {
        for (long long int i = 1; i <= liczba; i++)
        {
            silnia = silnia * i;
        }
        cout << silnia << endl;
    }

    else
        cout << "liczba jest mniejsza od 1" << endl;


    return 0;
}

  

2 odpowiedzi

+2 głosów
odpowiedź 18 marca 2017 przez niezalogowany

Gdzie twój kod wypisuje to:

Twój program powinien wypisać w osobnej linii dokładnie dwie cyfry (oddzielone pojedynczą spacją): cyfrę dziesiątek i cyfrę jedności liczby n! zapisanej w systemie dziesiętnym.

Z tego co widzę wypisujesz tylko silnię. 

Dodatkowo (gdy zrobisz poprzedni krok): 

Wartości silni rosną bardzo szybko. Przykładowo 21! = 51090942171709440000 (takie liczby już dawno nie mieszczą się w zmiennej typu long long int). W zadaniu będą podawane przypadki gdy n będzie równe aż 1 000 000 000. Rozpisz sobie na kartce silnie od 1 do np. 12. Od 10! powinieneś zauważyć zależność, że ostatnie cyfry silni zawsze będą zerami więc liczenie ich nie ma sensu :) Zwłaszcza, że to pochłania dużo czasu, a wynik i tak wyjdzie poza zakres zmiennej.

+1 głos
odpowiedź 18 marca 2017 przez mokrowski Mędrzec (155,460 p.)

SPOJ to nie jest portal dla masochistów :-) Ale do rzeczy.

Wypisz sobie wartości silni do 10 i zobacz jakie są zależności na 2 ostatnich cyfrach :-)

#include <iostream>

int silnia(int n) {
    if(n == 0) {
        return 1;
    }
    return silnia(n - 1) * n;
}

int main() {
    for(int i = 0; i < 11; ++i) {
        std::cout << i << ": " << silnia(i) << std::endl;
    }
}
/* wynik:
0: 1
1: 1
2: 2
3: 6
4: 24
5: 120
6: 720
7: 5040
8: 40320
9: 362880
10: 3628800
*/

 

komentarz 31 marca 2017 przez nosfaratu Nowicjusz (160 p.)
edycja 31 marca 2017 przez nosfaratu
czemu przy moim kodzie wychodzi że przekroczono limit czasu? to jest kod:

#include <iostream>

using namespace std;

unsigned long long int silnia (int l)
{
    if (l==0) return 1;
    else return l*silnia(l-1);
}
int n,dzies,pom,jedn;
int main()
{
    int *tab;
    tab=new int[n];
    cin>>n;
    for(int i=0; i<n; i++)
    {
        cin>>tab[i];
    }
    for(int i=0; i<n; i++)
    {
        pom=silnia(tab[i]);
        jedn=(pom%10);
        dzies=(pom%100)/10;
        cout<<dzies<<" "<<jedn<<endl;
    }
    delete [] tab;
    return 0;
}

Podobne pytania

0 głosów
1 odpowiedź 494 wizyt
pytanie zadane 30 lipca 2017 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)
+1 głos
1 odpowiedź 591 wizyt
0 głosów
1 odpowiedź 1,067 wizyt
pytanie zadane 19 października 2016 w C i C++ przez Paq_93 Początkujący (260 p.)

92,584 zapytań

141,434 odpowiedzi

319,669 komentarzy

61,967 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...