0440 - Fact Zero 1

De la Universitas MediaWiki

Cerinţa

Se citește un număr natural n. Să se determine ultima cifră nenulă din scrierea zecimală a numărului n!.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieşire

Programul afișează pe ecran numărul C, reprezentând ultima cifră nenulă din scrierea zecimală a numărului n!.

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • n! = 1 * 2 * ... * n

Exemplu

Intrare
13
Ieșire
8

Explicație

13! = 6227020800, iar ultima cifră nenulă este 8.

Rezolvare

def validare_date(n):
    if n < 1 or n > 1000:
        return False
    return True

if __name__ == '__main__':
    n = int(input("Introduceți numărul n: "))

    if validare_date(n):
        # Inițializăm contoarele pentru factorii 2 și 5
        nr_factori_2 = 0
        nr_factori_5 = 0

        # Calculăm numărul de factori ai lui 2 și 5 din descompunerea factorialului
        for i in range(2, n+1):
            x = i
            while x % 2 == 0:
                nr_factori_2 += 1
                x //= 2
            while x % 5 == 0:
                nr_factori_5 += 1
                x //= 5

        # Determinăm ultima cifră nenulă
        if nr_factori_2 > nr_factori_5:
            ultima_cifra_nenula = 8
        elif nr_factori_5 > nr_factori_2:
            ultima_cifra_nenula = 5
        else:
            ultima_cifra_nenula = 6

        print("Ultima cifră nenulă a lui", n, "! este", ultima_cifra_nenula)
        print("\nDatele de intrare corespund restricțiilor impuse.\n")
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")

Explicație rezolvare

Pentru a determina ultima cifră nenulă din descompunerea factorialului numărului n, trebuie să determinăm câți factori primi 2 și câți factori primi 5 sunt în descompunerea factorialului și să comparăm aceste valori. Pentru a implementa această soluție în Python, putem citi numărul n de la tastatură și apoi putem calcula numărul de factori primi 2 și 5 din descompunerea factorialului folosind o buclă for și două bucle while. După ce am calculat numărul de factori primi 2 și 5, putem compara aceste valori și să determinăm ultima cifră nenulă. Pentru a ne asigura că datele de intrare respectă restricțiile impuse, putem defini o funcție separată de validare a datelor și să apelăm această funcție înainte de a efectua calculul și afișarea rezultatului.