3076 - Circular: Difference between revisions

From Bitnami MediaWiki
Am creat de la zero.
 
mNo edit summary
Line 22: Line 22:


== Rezolvare ==
== Rezolvare ==
=== Rezolvare ver.1 ===


<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
Line 44: Line 45:
     # Afisăm suma
     # Afisăm suma
     print("Suma numerelor obținute prin permutări circulare la dreapta ale cifrelor lui", numar_natural, "este", suma)
     print("Suma numerelor obținute prin permutări circulare la dreapta ale cifrelor lui", numar_natural, "este", suma)
</syntaxhighlight>
=== Rezolvare ver.2 ===
<syntaxhighlight lang="python" line>
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
    # Afisăm suma
    print("Suma numerelor obținute prin permutări circulare la dreapta ale cifrelor lui", str(numar_natural), "este", suma)


</syntaxhighlight>
</syntaxhighlight>

Revision as of 17:10, 21 April 2023

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

<syntaxhighlight lang="python" line> numar_natural = input("Introduceti un numar natural: ") suma = 0

  1. Validare date de intrare

if not numar_natural.isdigit() or int(numar_natural) < 1 or int(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(numar_natural)):
       # Transformăm numărul într-o listă de caractere
       cifre = list(numar_natural)
       # Extragem prima cifră și o adăugăm la sfârșitul listei
       cifra = cifre.pop(0)
       cifre.append(cifra)
       # Transformăm lista înapoi într-un număr întreg
       numar_permutat = int(.join(cifre))
       # Adunăm numărul la suma totală
       suma += numar_permutat
   print("Datele introduse sunt valide.")
   # Afisăm suma
   print("Suma numerelor obținute prin permutări circulare la dreapta ale cifrelor lui", numar_natural, "este", suma)

</syntaxhighlight>

Rezolvare ver.2

<syntaxhighlight lang="python" line> numar_natural = int(input("Introduceti un numar natural: ")) suma = 0

  1. 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
   # Afisăm suma
   print("Suma numerelor obținute prin permutări circulare la dreapta ale cifrelor lui", str(numar_natural), "este", suma)

</syntaxhighlight>