3076 - Circular

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.

sursa: [1]

Cerinţa

Scrieți un program care citește un număr natural și care să calculeze suma a tuturor numerelor obținute prin permutări circulare la dreapta ale cifrelor lui n cu o poziție.

Date de intrare

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

Date de ieşire

Programul va afișa pe ecran suma, cu semnificația din enunț.

Restricții și precizări

  • 1 ≤ n ≤ 2.000.000.000

Exemplu

Intrare
123
Ieșire
Datele introduse sunt valide
666

Explicație

S-au citit n=123. Suma calculată este S=666 (=312+231+123).

Rezolvare

Rezolvare ver.1

def calculeaza_suma_permutari_circulare(numar):
    suma = 0

    # Validare date de intrare
    if numar < 1 or numar > 2000000000:
        print("Datele introduse nu sunt valide. Introduceti un numar natural pozitiv mai mic sau egal cu 2000000000.")
    else:
        for i in range(len(str(numar))):
            # Extragem ultima cifră
            ultima_cifra = numar % 10
            # "Rotim" numarul prin adaugarea ultimei cifre la inceput si eliminarea acesteia de la final
            numar = (numar // 10) + (ultima_cifra * (10 ** (len(str(numar)) - 1)))
            # Adunăm numărul la suma totală
            suma += numar
        print("Datele introduse sunt valide.")
        # Afisăm suma
        print("Suma numerelor obținute prin permutări circulare la dreapta ale cifrelor lui", str(numar), "este", suma)


if __name__ == "__main__":
    numar = int(input("Introduceti un numar natural: "))
    calculeaza_suma_permutari_circulare(numar)

Rezolvare ver.2

numar_natural = int(input("Introduceti un numar natural: "))
suma = 0

# Validare date de intrare
if numar_natural < 1 or numar_natural > 2000000000:
    print("Datele introduse nu sunt valide. Introduceti un numar natural pozitiv mai mic sau egal cu 2000000000.")
else:
    for i in range(len(str(numar_natural))):
        # Extragem ultima cifră
        ultima_cifra = numar_natural % 10
        # "Rotim" numarul prin adaugarea ultimei cifre la inceput si eliminarea acesteia de la final
        numar_natural = (numar_natural // 10) + (ultima_cifra * (10 ** (len(str(numar_natural)) - 1)))
        # Adunăm numărul la suma totală
        suma += numar_natural
    print("Datele introduse sunt valide.")
    # Afisăm suma
    print("Suma numerelor obținute prin permutări circulare la dreapta ale cifrelor lui", str(numar_natural), "este", suma, ".")