3076 - Circular: Difference between revisions
mNo edit summary |
|||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
sursa: [https://www.pbinfo.ro/probleme/3076/circular] | |||
== Cerinţa == | == 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. | 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. | ||
Line 19: | Line 20: | ||
== Explicație == | == Explicație == | ||
S-au citit n=123. Suma calculată este S=666 (=312+231+123). | |||
== Rezolvare == | == Rezolvare == | ||
Line 25: | Line 26: | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# Validare date de intrare | def calculeaza_suma_permutari_circulare(numar): | ||
if | suma = 0 | ||
else: | # 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) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 51: | Line 55: | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
numar_natural = int(input("Introduceti un numar natural: ")) | numar_natural = int(input("Introduceti un numar natural: ")) | ||
suma = 0 | suma = 0 | ||
Line 67: | Line 72: | ||
print("Datele introduse sunt valide.") | print("Datele introduse sunt valide.") | ||
# Afisăm suma | # Afisăm suma | ||
print("Suma numerelor obținute prin permutări circulare la dreapta ale cifrelor lui", str(numar_natural), "este", suma) | print("Suma numerelor obținute prin permutări circulare la dreapta ale cifrelor lui", str(numar_natural), "este", suma, ".") | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 23:08, 15 May 2023
sursa: [1]
Cerinţa[edit | edit source]
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[edit | edit source]
Programul citește de la tastatură numărul.
Date de ieşire[edit | edit source]
Programul va afișa pe ecran suma, cu semnificația din enunț.
Restricții și precizări[edit | edit source]
- 1 ≤ n ≤ 2.000.000.000
Exemplu[edit | edit source]
- Intrare
- 123
- Ieșire
- Datele introduse sunt valide
- 666
Explicație[edit | edit source]
S-au citit n=123. Suma calculată este S=666 (=312+231+123).
Rezolvare[edit | edit source]
Rezolvare ver.1[edit | edit source]
<syntaxhighlight lang="python" line>
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)
</syntaxhighlight>
Rezolvare ver.2[edit | edit source]
<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 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, ".")
</syntaxhighlight>