4209 - DifParImpar

De la Universitas MediaWiki

Cerința

Scrieți funcția recursivă DifParImpar care primind ca parametru un număr natural n, returnează un număr întreg reprezentând diferența dintre numărul cifrelor pare și numărul celor impare.

Restricții și precizări

  • 0 ≤ n ≤ 2.147.000.000
  • Numele funcției este DifParImpar.
  • Se recomandă utilizarea recursivității în rezolvarea problemei. De asemenea, se recomandă să nu se folosească alte funcții suplimentare.

Exemplu

DifParImpar(240) = 3 și DifParImpar(21377) = -3.

Explicație

Funcția DifParImpar(n) are ca scop calcularea diferenței dintre suma cifrelor pare și suma cifrelor impare ale numărului dat n.

Dacă numărul dat n este 0, funcția returnează 0, altfel se extrage ultima cifră a numărului cu n % 10 și se verifică dacă este pară sau impară. În funcție de acest lucru, se adună 1 la suma cifrelor pare sau -1 la suma cifrelor impare. Apoi, funcția se apelează recursiv cu parametrul n // 10, adică fără ultima cifră a lui n.

Funcția se va opri și va returna suma finală a diferenței dintre suma cifrelor pare și impare atunci când numărul devine 0.

Rezolvare

Varianta 1

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

def DifParImpar(n):
    if n == 0:
        return 0
    else:
        ultima_cifra = n % 10
        if ultima_cifra % 2 == 0:
            return 1 + DifParImpar(n // 10)
        else:
            return -1 + DifParImpar(n // 10)

def main():
    n = input("Introduceti un numar intreg intre 0 si 2.147.000.000: ")
    try:
        n = int(n)
        if validate_n(n):
            result = DifParImpar(n)
            if result > 0:
                print(f"Suma cifrelor pare din numarul {n} este mai mare decat suma cifrelor impare cu {result}.")
            elif result == 0:
                print(f"Suma cifrelor pare din numarul {n} este egala cu suma cifrelor impare.")
            else:
                print(f"Suma cifrelor impare din numarul {n} este mai mare decat suma cifrelor pare cu {abs(result)}.")
        else:
            print("Numarul introdus nu este valid.")
    except ValueError:
        print("Nu ati introdus un numar intreg.")