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 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 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 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
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>
Explicatie
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.