2805 - Duplicare

From Bitnami MediaWiki
Revision as of 18:34, 2 April 2023 by Cuceu Andrei (talk | contribs) (Pagină nouă: ==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'''....)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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>