3100 - suma perm circ
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.