3272 - Sum Div Ogl

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 dau n numere naturale. Determinați suma divizorilor oglinditelor celor n numere.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieşire

Programul va afișa pe ecran numărul suma, reprezentând suma cerută.

Restricții și precizări

  • numar ∈ Ν
  • 0 ⩽ n ⩽ 1.000
  • 0 ⩽ numar ⩽ 1.000.000.000

Exemplu

Intrare
3
12 23 30
Ieșire
Datele de intrare corespund restricțiilor impuse.
99

Explicație

Oglinditul lui 12 este 21; suma divizorilor săi este 32. Oglinditul lui 23 este 32; suma divizorilor săi este 63. Oglinditul lui 30 este 3; suma divizorilor săi este 4.

Rezolvare

def validare_date_numar(numar):
    flag = False
    if numar.isdigit():
        if 0 <= int(numar) <= 1_000_000_000:
            flag = True
    return flag


def validare_date_numere(n):
    flag = False
    if 0 <= int(n) <= 1000:
        flag = True
    return flag


def oglindit(numar):
    return int(str(numar)[::-1])


def suma_divizori(numar):
    suma = 0
    for i in range(1, numar//2 + 1):
        if numar % i == 0:
            suma += i
    suma += numar  # adăugăm și numărul în sumă, deoarece este divizor al lui numar
    return suma


def suma_divizori_oglindite(lista_numere):
    suma_totala = 0
    for numar in lista_numere:
        oglinditul = oglindit(numar)
        suma_divizori_oglindit = suma_divizori(oglinditul)
        suma_totala += suma_divizori_oglindit
    return suma_totala


if __name__ == '__main__':
    n = int(input())
    if validare_date_numere(n):
        print("\nDatele de intrare corespund restricțiilor impuse.\n")
        lista_numere = []
        for i in range(n):
            while True:
                numar = input(f"Introduceți numărul {i + 1}: ")
                if validare_date_numar(numar):
                    lista_numere.append(int(numar))
                    break
                else:
                    print("Numărul introdus nu corespunde restricțiilor impuse.")
        print(f"\nSuma divizorilor oglinditelor este: {suma_divizori_oglindite(lista_numere)}")
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")

Explicație

Acest program calculează suma divizorilor oglinditelor a n numere date de la tastatură. Mai întâi, programul verifică dacă numărul de numere introduse este valid, folosind funcția validare_date_numere. Dacă da, utilizatorul este rugat să introducă cele n numere, iar acestea sunt stocate într-o listă. Pentru fiecare număr din listă, se calculează oglinditul folosind funcția oglindit și apoi se calculează suma divizorilor oglinditelor acestui număr, folosind funcția suma_divizori_oglindite. Suma totală a divizorilor oglinditelor este calculată prin adăugarea sumei divizorilor oglinditelor pentru fiecare număr din listă și este afișată la sfârșit. Funcțiile validare_date_numar și validare_date verifică dacă numerele sunt valide și respectă anumite restricții.