• 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
369 wizyt
pytanie zadane 12 sierpnia 2019 w C i C++ przez wjacoszek2000 Początkujący (290 p.)

Witam, stworzyłem program zgodny z poleceniem: https://pl.spoj.com/problems/FCTRL3  Niestety sędzia nie zalicza mi zadania. Można stworzyć program wypisujący końcówki silni aż do 9 ale moim zdaniem program traci na elegancji. Czy mogę liczyć na jakąś pomoc wskazówkę lub podkreślenie gdzie jest błąd?

#include <iostream>


using namespace std;
int liczba, suma,t;
int ile,s;
int silnia(float l)
{
    if(l==0) return 1;
    else return l*silnia(l-1);

}

int main()
{  cin>>ile;
   for (int i=1; i<=ile; i++)
   {
       cin>>liczba;
       if (liczba>9)
       {
           cout<<"0 0";
       }
       if (liczba<=9)
        {
          suma=silnia(liczba);
          s=(suma/10)%10;
          t= suma%10;
          cout<<s<<t;
        }
   }

    return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 12 sierpnia 2019 przez Kacper Sas Dyskutant (8,460 p.)
Sprawdź wynik np. 20! i porównaj z maksymalną wartością typu int, jaki zwraca funkcja "silnia". Można to zrobić elegancko w sposób jaki wymieniłeś.

// gdy rozwiązywałem to zadanie pierwszy raz nie pomyślałem o przepełnieniu i powtarzających się końcówkach, więc brnąłem w liczenie. Nie wiem jak, ale SPOJ zaliczył to zadanie z czasem 0.78, a potem 0.76 XD prawdopodobnie ucięło zmienną przy przepełnieniu pozostawiając końcówkę. Nie zastanawiałem się w sumie nigdy dlaczego. To tak w ramach lekkiego offtopu.
komentarz 15 sierpnia 2019 przez mycha Nowicjusz (140 p.)

Mam pytanie bo rozwiązałam to zadanie w taki sposób ale wciąż jest odpowiedź błędna na SPOJ.. Dlaczego?

public class NSilnia {
	
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int liczba;
		int ile;
		ile = sc.nextInt();
		for(int y=0; y<ile; y++) {
			
		
		liczba = sc.nextInt();
		
		switch (liczba) {
		case 1:
			System.out.println("0 1");
			break;
		case 2:
			System.out.println("0 2");
			break;
		case 3:
			System.out.println("0 6");
			break;
		case 4:
			System.out.println("2 4");
			break;
		case 5:
			System.out.println("2 0");
			break;
		case 6:
			System.out.println("2 0");
			break;
		case 7:
			System.out.println("4 0");
			break;
		case 8:
			System.out.println("2 0");
			break;
		case 9:
			System.out.println("8 0");
			break;
		case 10:
			System.out.println("0 0");
			break;
		case 11:
			System.out.println("0 0");
			break;
		case 12:
			System.out.println("0 0");
			break;
		case 13:
			System.out.println("0 0");
			break;
		case 14:
			System.out.println("0 0");
			break;
		case 15:
			System.out.println("0 0");
			break;
		case 16:
			System.out.println("0 0");
			break;
		case 17:
			System.out.println("0 0");
			break;
		case 18:
			System.out.println("0 0");
			break;
		case 19:
			System.out.println("0 0");
			break;
		case 20:
			System.out.println("0 0");
			break;
		case 21:
			System.out.println("0 0");
			break;
		case 22:
			System.out.println("0 0");
			break;
		case 23:
			System.out.println("0 0");
		case 24:
			System.out.println("0 0");
			break;
		case 25:
			System.out.println("0 0");
			break;
		case 26:
			System.out.println("0 0");
			break;
		case 27:
			System.out.println("0 0");
			break;
		case 28:
			System.out.println("0 0");
			break;
		case 29:
			System.out.println("0 0");
			break;
		case 30:
			System.out.println("0 0");
			break;
		}
		}
		}
	}

 

0 głosów
odpowiedź 12 sierpnia 2019 przez Szfierzak Gaduła (3,750 p.)

Kacper Sas tutaj jest warunek na silnię większą od 9, który eliminuje przepełnienie inta. Na pierwszy rzut oka nie dajesz znaku nowej linii w warunku kiedy liczba>9, więc wyniki zapisywane są ciągiem obok siebie - błędna odp. 

Dalej podobnie

cout<<s<<t;

brak spacji i nie dajesz znaku nowej linii - błędna odpowiedź.

komentarz 12 sierpnia 2019 przez wjacoszek2000 Początkujący (290 p.)
Niestety po wpisaniu endl nadal sędzia nie akceptuje zadania
komentarz 12 sierpnia 2019 przez Szfierzak Gaduła (3,750 p.)
Tak sędzia rozróżnia co jest wejściem/wyjściem, ale formatowanie wyjścia należy do Ciebie. Czyli jeżeli w zadanku masz, że każdy wynik musi być w nowej lini to musisz dodać albo endl albo "\n", plus pojedynczą spacje - zgodnie z treścią zadania - między liczbami dziesiątek i jedności.
komentarz 12 sierpnia 2019 przez wjacoszek2000 Początkujący (290 p.)

poprawiłem i nadal ten sam błąd indecision

   cout<<s <<" "<<t <<endl;

 

komentarz 12 sierpnia 2019 przez Szfierzak Gaduła (3,750 p.)
edycja 12 sierpnia 2019 przez Szfierzak

A tutaj też dodałeś??

cout << "0 0" << endl;

Wklejałem Twój kod do spoja z poprawkami i przechodzł.

1
komentarz 12 sierpnia 2019 przez wjacoszek2000 Początkujący (290 p.)

Działa, dziękuje bardzo na drugi raz będę zwracał większą uwagę na polecenie wink

Podobne pytania

0 głosów
1 odpowiedź 259 wizyt
pytanie zadane 25 września 2021 w C i C++ przez polandonion Mądrala (7,040 p.)
0 głosów
1 odpowiedź 132 wizyt
pytanie zadane 27 grudnia 2018 w C i C++ przez Przemek49 Obywatel (1,260 p.)
0 głosów
2 odpowiedzi 2,006 wizyt
pytanie zadane 12 sierpnia 2018 w C i C++ przez fafel Nowicjusz (140 p.)

92,555 zapytań

141,403 odpowiedzi

319,553 komentarzy

61,939 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!

...