2924 - FactorialInnEasy

De la Universitas MediaWiki

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.