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
Kod źródłowy w C:
#include <stdio.h> #include <stdlib.h> int main() { int i=0,j=0; unsigned long long int a=0; scanf("%d",&i); for(j;j<i;++j) { scanf("%d",&a); switch(a) { case 0: case 1: printf("%d %d\n",0,1); break; case 2: printf("%d %d\n",0,2); break; case 3: printf("%d %d\n",0,6); break; case 4: printf("%d %d\n",2,4); break; case 7: printf("%d %d\n",4,0); break; case 5: case 6: case 8: printf("%d %d\n",2,0); break; case 9: printf("%d %d\n",8,0); break; default: printf("%d %d\n",0,0); break; } } return 0; }
Kod źródłowy w C++:
#include <iostream> #include <cstdio> using namespace std; int main() { int i=0,j=0; unsigned long long int a=0; cin>>i; for(j;j<i;++j) { cin>>a; switch(a) { case 0: case 1: cout<<"0 1"<<endl; break; case 2: cout<<"0 2"<<endl; break; case 3: cout<<"0 6"<<endl; break; case 4: cout<<"2 4"<<endl; break; case 5: case 6: case 8: cout<<"2 0"<<endl; break; case 7: cout<<"4 0"<<endl; break; case 9: cout<<"8 0"<<endl; break; default: cout<<"0 0"<<endl; break; } } return 0; }
Kod źródłowy w Python 2:
input = int(raw_input('')) for i in range(0, input, +1): number = int(raw_input('')) if number == 1: print '0 1' elif number == 0: print '0 1' elif number == 2: print '0 2' elif number == 3: print '0 6' elif number == 4: print '2 4' elif number == 5: print '2 0' elif number == 6: print '2 0' elif number == 7: print '4 0' elif number == 8: print '2 0' elif number == 9: print '8 0' else: print '0 0'
Kod źródłowy w Python 3:
standard_input = int(input('')) for i in range(0, standard_input, +1): number = int(input('')) if number == 1: print ('0 1') elif number == 0: print ('0 1') elif number == 2: print ('0 2') elif number == 3: print ('0 6') elif number == 4: print ('2 4') elif number == 5: print ('2 0') elif number == 6: print ('2 0') elif number == 7: print ('4 0') elif number == 8: print ('2 0') elif number == 9: print ('8 0') else: print ('0 0')
Źródło:
http://pl.spoj.com/problems/FCTRL3/
Ja to inaczej rozwiązałem. I Sędzia sądu SPOJ nie przyjmuje tego. Dlaczego, czy ma swój uregulowany algorytm i nie dopuszcza myślenia innych ludzi?
OdpowiedzUsuń#include
#include
using namespace std;
string liczba, spacja;
int D, dl;
unsigned long long int n;
int silnia = 1;
int main()
{
cin >> D;
for (int i = 0; i < D; i++)
{
cin >> n;
for (int i = 1; i <= n; i++)
{
silnia = silnia * i;
liczba = to_string(silnia);
dl = liczba.length();
if (silnia < 10) {
liczba.insert(0, "0 ");
}
else
{
liczba = liczba.erase(0, dl-2);
spacja = " ";
liczba = liczba[0] + spacja + liczba[1];
}
}
//cout << silnia << endl;
cout << liczba << endl;
silnia = 1;
}
return 0;
}