4211 - ElimZTRec

De la Universitas MediaWiki

Cerința

Scrieți funcția recursivă ElimZTRec care primind ca parametru un număr natural nenul n, returnează numărul obținut prin eliminarea eventualelor cifre de 0 de la sfârșitul lui n.

Restricții și precizări

  • 1 ≤ n ≤ 2.147.000.000
  • Numele funcției este ElimZTRec.
  • Se recomandă utilizarea recursivității în rezolvarea problemei.

Date de intrare

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

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte.", apoi pe un rând nou un mesaj dat în funcție de valoarea returnată de funcția ElimZTRec, reprezentând numărul cerut. În cazul în care numărul introdus depășește limitele date, se va afișa "Numarul introdus nu este valid.", iar dacă numărul introdus nu este întreg, se va afișa "Nu ati introdus un numar intreg."

Exemplu 1

Intrare
Introduceti un numar natural intre 1 si 2147000000: 240
Ieșire
Datele introduse sunt valide.
Numarul fara zerouri la final este: 24

Exemplu 2

Intrare
Introduceti un numar natural intre 1 si 2147000000: 123
Ieșire
Datele introduse sunt valide.
Numarul fara zerouri la final este: 123

Rezolvare

def validate_n(n):
    if isinstance(n, int) and n >= 1 and n <= 2147000000:
        return True
    else:
        return False

def ElimZTRec(n):
    if n % 10 != 0:
        return n
    else:
        return ElimZTRec(n // 10)

if __name__ == "__main__":
    n = input("Introduceti un numar natural intre 1 si 2147000000: ")
    try:
        n = int(n)
        if validate_n(n):
            result = ElimZTRec(n)
            print("Datele introduse sunt valide.")
            print(f"Numarul fara zerouri la final este: {result}")
        else:
            print("Numarul introdus nu este valid.")
    except ValueError:
        print("Nu ati introdus un numar natural.")

Explicație

Funcția validate_n(n) verifică dacă valoarea argumentului n este un număr întreg pozitiv între 1 și 2147000000 (valoarea maximă pe 32 de biți). Dacă această condiție este îndeplinită, funcția returnează True, altfel returnează False.

Funcția ElimZTRec(n) primește un număr natural n și elimină zerourile de la sfârșitul acestuia recursiv, până când ultima cifră a numărului este diferită de 0. În cazul în care ultima cifră a numărului este diferită de 0, funcția returnează valoarea inițială a numărului, altfel apelează funcția recursiv cu n împărțit la 10.

În secțiunea if __name__ == "__main__":, programul primește de la utilizator un număr natural, îl validează folosind funcția validate_n(n), apelează funcția ElimZTRec(n) pentru a elimina zerourile de la sfârșitul numărului și afișează rezultatul. Dacă numărul introdus de utilizator nu este valid, se afișează un mesaj corespunzător.