2805 - Duplicare
De la Universitas MediaWiki
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
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