Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

FCTRL3 - Dwie cyfry silni

Zadanie: Silnia

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 (1D≤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 (0n ≤ 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

Dodane przez:Rafal Nowak
Data dodania:2005-03-04
Limit czasu wykonania programu:1s
Limit długości kodu źródłowego5000B
Limit pamięci:1536MB
Cluster: Cube (Intel G860)
Języki programowania:All except: GOSU

ukryj komentarze
2017-12-14 00:04:18
Problem pewnie dawno rozwiązany ale tak dla potomnych, kolega poniżej ma jeden malutki, malusieńki, taki tyci tyci błąd, jego kod dla wartości n=0 zwraca 0 0.
Ot tyle. Pamiętajcie, że 0!=1 i algorytm widocznie to sprawdza weryfikując kod.
Powodzenia :)
2017-11-14 21:14:28
#include <iostream>

using namespace std;
int D,zwrot,dziesiatki,jednosci;
int main()
{
cin>>D;
int n[D];
for(int i=1;i<=D;i++)
{
cin>>n[i];
zwrot=n[i];
if (zwrot<10)
{
for(int j=1;j<n[i];j++)
{
zwrot=zwrot*j;
}
dziesiatki=(zwrot%100-(zwrot%10))/10;
jednosci=zwrot%10;
}
else {dziesiatki=0;jednosci=0;}
cout<<dziesiatki<<" "<<jednosci<<endl;
}
return 0;
}


wyskakuje mi ze mam błędna odpowiedz. Moim zdaniem jest dobra. może mi ktoś napisać co jest nie tak ??
2017-11-09 02:23:24
#include<iostream>
using namespace std;

int main()
{
int D, n, silnia = 1, cyfra_dziesiatek, cyfra_jednosci;
cin >> D;
if (D >= 1 && D <= 30)
{
for (int i = 0; i < D; i++)
{
cin >> n;
if (n >= 0 && n <= 1000000000)
{
if (n <= 1)
{
silnia = 1;
}
else
{
for (int i = 1; i <= n; i++)
{
silnia = silnia * i;
}
}
cyfra_dziesiatek = (silnia / 10) % 10;
cyfra_jednosci = silnia % 10;
cout << cyfra_dziesiatek << " " << cyfra_jednosci << endl;
}
else
return 0;
}
}
else
return 0;

system("PAUSE");
return 0;
}
Czemu bład kompilacji wyświetla SPOJ?
2017-10-15 19:45:14
jeżeli już tak chcesz robić to jedności=w%10 a dziesiątki to ((w-jednosci)/10)%10
2017-10-14 17:00:03
rozwiazanie banalnie proste wystarczy zauważyć co sie dzieje dla dziesiatke i jednosci dla n>9 pozdrawiam :>

Ostatnio edytowany: 2017-10-14 17:01:46
2017-10-03 23:44:35
Jako ciekawostkę podrzucę fakt, iż uparłem się na metodę obliczania silni w 1s dla takich liczb i... AC w 0,76s :D
Zero switch'a, a liczenie tej silni :D

Silnia nie koniecznie mieści się w zmiennej, ale specjalnie wykorzystałem tylko inta, by udowodnić sobie, że się da :D

Ostatnio edytowany: 2017-10-03 23:51:33
2017-09-20 12:10:31
Zadanie można rozwiązać z użyciem funkcji:
funkcja 1 - Zwracająca liczbę dziesiątek dla 4!, 5!, 6! i 8! =2 dla 7! = 4 dla 9!=8, dla pozostałych = 0
funkcja 2 - Zwracjąca liczbę jedności dla 0! i 1! =1 dla 2! = 2 dla 3!=6 dla 4!=4, dla pozostałych = 0

potem wystarczy złączyć wyniki cout<<funkcja1()<<" "<<funkcja2()<<endl;
2017-09-09 20:14:14


Ostatnio edytowany: 2017-09-09 20:50:40
2017-09-06 21:30:24
Wszystko działa ale oczywiście przekroczenie czasu ;/ bez sensu ...
2017-08-17 13:28:20
To zadanie nie polega na "obliczaniu silni". Zajmuje to zbyt wiele czasu, a limit to 1s. W rozwiązaniu skupić się należy stricte na liczbie dziesiętnej i jedność. Warto zauważyć, że dla n>9, liczby te w rozwinięciu dziesiętnym n! są takie same "...00". Pomocna może być tu instrukcja switch(). Program może również wyrzucać błąd jeżeli dostanie na wyjściu zmienną string "0 0" zamiast liczby całkowitej
(cout << 0 << " " << 0 << endl;) Wszystko jasne? Do dzieła!
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.