2805 - Duplicare
Cerința
Subprogramul duplicare are un singur parametru, n, prin care primește un număr natural (n∈[1,104)). Subprogramul furnizează, prin același parametru, numărul obținut din n prin inserarea, după fiecare cifră pară din scrierea lui, a unei cifre egale cu jumătate din aceasta.
Scrieți definiția completă a subprogramului.
Exemplu
Dacă n=2380 după apel, n=2138400, iar dacă n=35 după apel, n=35.
Important
Soluția propusă va conține definiția subprogramului cerut. Prezența în soluție a altor instrucțiuni poate duce erori de compilare sau de execuție care vor avea ca efect depunctarea soluției.
Rezolvare
Rezolvare ver. 1
<syntaxhighlight lang="python" line="1" start="1">
def duplicare(n: int) -> int:
""" Inserează, după fiecare cifră pară din scrierea lui n, o cifră egală cu jumătatea acesteia.
:param n: numărul natural de prelucrat (1 <= n < 10^4) :return: numărul obținut prin inserarea cifrelor """ result = 0 factor = 1
while n > 0: cifra = n % 10 n = n // 10
if cifra % 2 == 0: result += cifra * factor factor *= 10 result += (cifra // 2) * factor factor *= 10 else: result += cifra * factor factor *= 10
return result
if __name__ == '__main__':
# Testăm subprogramul cu exemplele din enunț assert duplicare(2380) == 2138400 assert duplicare(35) == 35
# Testăm cazul în care n conține doar cifre impare assert duplicare(13579) == 13579
# Testăm cazul în care n conține doar cifre pare assert duplicare(2468) == 222466688
</syntaxhighlight>