2924 - FactorialInnEasy

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerința

Se dă numărul natural n. Să se afișeze numărul de cifre a lui (n!)n.

Date de intrare

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

Date de ieșire

După ce se afișează mesajul de validitate a datelor introduse corespunzător ("Date de intrare valide" în cazul în care datele respectă cerințele; "Input-ul trebuie să fie un număr întreg" pentru cazul în care n nu este număr întreg; "Input invalid: {eroare}" în orice alt caz), programul va afișa pe ecran numărul de cifre a lui (n!)n formatat într-un mesaj, astfel: Numărul de cifre din ({n}!)^{n} este {numărul de cifre}

Restricții și precizări

  • n ⩽ 106

Exemplu

Intrare
Introduceți un număr pozitiv: 3
Ieșire
Date de intrare valide
Numărul de cifre din (3!)^3 este 3

Explicație exemplu

(3!)3=216

Rezolvare

def validate_input(n: str) -> int:
    try:
        n = int(n)
        if n < 1:
            raise ValueError("Input-ul trebuie să fie un număr întreg")
        return n
    except ValueError as e:
        print(f"Input invalid: {e}")

def compute_factorial_power(n: int) -> int:
    factorial = 1
    for i in range(2, n+1):
        factorial *= i
    return factorial ** n

def count_digits(number: int) -> int:
    return len(str(number))

if __name__ == "__main__":
    n = input("Introduceți un număr pozitiv: ")
    n = validate_input(n)
    if n:
        factorial_power = compute_factorial_power(n)
        digit_count = count_digits(factorial_power)
        print("Date de intrare valide")
        print(f"Numărul de cifre din ({n}!)^{n} este {digit_count}")

Explicație cod

Funcția `validate_input(n: str) -> int` primește un string `n` și încearcă să îl transforme într-un număr întreg. Dacă acest lucru este posibil și numărul obținut este mai mare sau egal cu 1, atunci funcția returnează acel număr. În caz contrar, funcția aruncă o excepție și afișează un mesaj de eroare.

Funcția `compute_factorial_power(n: int) -> int` primește un număr întreg `n` și calculează valoarea expresiei `(n!)^n`, unde `n!` reprezintă factorialul lui `n`. Funcția utilizează un ciclu for pentru a calcula factorialul lui `n`, iar apoi ridică acest factorial la puterea `n`.

Funcția `count_digits(number: int) -> int` primește un număr întreg `number` și returnează numărul de cifre ale acestuia. Funcția convertește numărul într-un string și returnează lungimea acestui string.

În funcția `main`, se citește un număr pozitiv de la tastatură și se validează folosind funcția `validate_input`. Dacă numărul este valid, se calculează valoarea expresiei cerute utilizând funcția `compute_factorial_power`, iar apoi se numără cifrele acestei valori utilizând funcția `count_digits`. Rezultatul este afișat la ecran.