3100 - suma perm circ: Difference between revisions
Pagină nouă: ==Cerința== Scrieți un program care citește un număr natural n și care să calculeze și să afișeze suma S a tuturor numerelor obținute prin permutări circulare ale cifrelor lui n cu o poziție. ==Date de intrare== Programul citește de la tastatură numărul n. ==Date de ieșire== Programul va afișa pe ecran numărul S, reprezentând suma cerută. ==Restricții și precizări== * n are cel mult 100.000 de cifre ==Exemplu== Intrare 165 Ieșire 1332 Numere... |
No edit summary |
||
Line 8: | Line 8: | ||
==Date de ieșire== | ==Date de ieșire== | ||
Programul va afișa pe ecran numărul S, reprezentând suma cerută. | Programul va afișa pe ecran mesajul de validare și numărul S, reprezentând suma cerută. | ||
În cazul în care datele nu sunt valide, se va afișa un mesaj corespunzător. | |||
==Restricții și precizări== | ==Restricții și precizări== | ||
Line 15: | Line 15: | ||
==Exemplu== | ==Exemplu== | ||
Intrare | ; Intrare | ||
: 165 | |||
Ieșire | Ieșire | ||
: Date de intrare valide | |||
: 1332 | |||
Numere obținute din 165 prin permutări circulare sunt 165, 651 și 516, iar suma lor este 1332. | Numere obținute din 165 prin permutări circulare sunt 165, 651 și 516, iar suma lor este 1332. | ||
Line 39: | Line 38: | ||
if not validate_input(s): | if not validate_input(s): | ||
return | return | ||
else: | |||
print("Date de intrare valide") | |||
l = len(s) | l = len(s) | ||
for i in range(l-1, -1, -1): | for i in range(l-1, -1, -1): | ||
Line 59: | Line 60: | ||
t //= 10 | t //= 10 | ||
N = [0] * 100001 | if __name__ == "__main__": | ||
S = [0] * 100001 | N = [0] * 100001 | ||
citire(N) | S = [0] * 100001 | ||
S[0] = N[0] | citire(N) | ||
for i in range(1, N[0]+1): | S[0] = N[0] | ||
for i in range(1, N[0]+1): | |||
sumcf = sum(N[1:N[0]+1]) | S[i] = 1 | ||
prod(S, sumcf) | sumcf = sum(N[1:N[0]+1]) | ||
afisare(S) | prod(S, sumcf) | ||
afisare(S) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== | ==Explicație== | ||
Acest program citeste un numar mare n (de pana la 100000 de cifre) si calculeaza produsul tuturor cifrelor lui n, apoi afiseaza rezultatul. Pentru a stoca numerele mari, programul utilizeaza un tip de date personalizat nrMare, definit prin intermediul unui alias pentru un vector de tip long. Programul contine si o functie de validare a input-ului, care verifica daca numarul n respecta restricțiile impuse, adica sa aiba cel mult 100000 de cifre si sa contina doar cifre. | Acest program citeste un numar mare n (de pana la 100000 de cifre) si calculeaza produsul tuturor cifrelor lui n, apoi afiseaza rezultatul. Pentru a stoca numerele mari, programul utilizeaza un tip de date personalizat nrMare, definit prin intermediul unui alias pentru un vector de tip long. Programul contine si o functie de validare a input-ului, care verifica daca numarul n respecta restricțiile impuse, adica sa aiba cel mult 100000 de cifre si sa contina doar cifre. |
Revision as of 06:55, 28 April 2023
Cerința
Scrieți un program care citește un număr natural n și care să calculeze și să afișeze suma S a tuturor numerelor obținute prin permutări circulare ale cifrelor lui n cu o poziție.
Date de intrare
Programul citește de la tastatură numărul n.
Date de ieșire
Programul va afișa pe ecran mesajul de validare și numărul S, reprezentând suma cerută. În cazul în care datele nu sunt valide, se va afișa un mesaj corespunzător.
Restricții și precizări
- n are cel mult 100.000 de cifre
Exemplu
- Intrare
- 165
Ieșire
- Date de intrare valide
- 1332
Numere obținute din 165 prin permutări circulare sunt 165, 651 și 516, iar suma lor este 1332.
Rezolvare
<syntaxhighlight lang="python> def validate_input(s):
if len(s) > 100000: print("Error: n has more than 100000 digits") return False for c in s: if not c.isdigit(): print("Error: n must contain only digits") return False return True
def citire(A):
s = input() if not validate_input(s): return else: print("Date de intrare valide") l = len(s) for i in range(l-1, -1, -1): A[l-i] = int(s[i]) A[0] = l
def afisare(A):
for i in range(A[0], 0, -1): print(A[i], end=)
def prod(B, x):
t = 0 for i in range(1, B[0]+1): t = B[i] * x + t B[i] = t % 10 t //= 10 while t: B[0] += 1 B[B[0]] = t % 10 t //= 10
if __name__ == "__main__":
N = [0] * 100001 S = [0] * 100001 citire(N) S[0] = N[0] for i in range(1, N[0]+1): S[i] = 1 sumcf = sum(N[1:N[0]+1]) prod(S, sumcf) afisare(S)
</syntaxhighlight>
Explicație
Acest program citeste un numar mare n (de pana la 100000 de cifre) si calculeaza produsul tuturor cifrelor lui n, apoi afiseaza rezultatul. Pentru a stoca numerele mari, programul utilizeaza un tip de date personalizat nrMare, definit prin intermediul unui alias pentru un vector de tip long. Programul contine si o functie de validare a input-ului, care verifica daca numarul n respecta restricțiile impuse, adica sa aiba cel mult 100000 de cifre si sa contina doar cifre.