3348 - Suma Puteri 2: Difference between revisions

From Bitnami MediaWiki
No edit summary
Line 25: Line 25:
:32
:32


== Rezolvare ==
==Rezolvare==
<syntaxhighlight lang="python" line="1" start="1">
=== Rezolvare ver. 1===
def main():
<syntaxhighlight lang="python" line>
      
def validare(n):
n = int(input("Introduceți numărul n: "))
     return n.isdigit() and 1 <= int(n) < 231


puteri_de_2 = []
putere_curenta = 1


while n > 0:
def descompunere_in_puteri_de_2(n):
    if n % 2 == 1:
    puteri_de_2 = []
        puteri_de_2.append(putere_curenta)
    k = 0
    putere_curenta += 1
    while 2 ** k <= n:
     n //= 2
        k += 1
    k -= 1
    while k >= 0:
        if 2 ** k <= n:
            puteri_de_2.append(2 ** k)
            n -= 2 ** k
        k -= 1
     return puteri_de_2[::-1]


print("Descompunerea numărului în puteri ale lui 2 este:", puteri_de_2)
 
if __name__ == '__main__':
    n = input("Introduceți numărul n: ")
    if validare(n):
        n = int(n)
        print("Datele introduse corespund restricțiilor impuse.")
        puteri_de_2 = descompunere_in_puteri_de_2(n)
        print("{}".format(" ".join(
            str(p) for p in puteri_de_2)))
    else:
        print("Datele introduse nu corespund restricțiilor impuse.")
</syntaxhighlight>
</syntaxhighlight>

Revision as of 15:49, 15 March 2023

Cerință

Se dă un număr natural n. Descompuneți numărul n ca sumă de puteri ale lui 2.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieșire

Programul va afișa pe ecran, în ordine crescătoare, separate prin câte un spațiu, puterile lui 2 care au suma n.

Restricții de precizări

  • 1 ⩽ n ⩽ 2^31

Exemplul 1

Intrare
43
Ieșire
Datele introduse corespund restricțiilor impuse.
1
2
8
32

Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line> def validare(n):

   return n.isdigit() and 1 <= int(n) < 231


def descompunere_in_puteri_de_2(n):

   puteri_de_2 = []
   k = 0
   while 2 ** k <= n:
       k += 1
   k -= 1
   while k >= 0:
       if 2 ** k <= n:
           puteri_de_2.append(2 ** k)
           n -= 2 ** k
       k -= 1
   return puteri_de_2[::-1]


if __name__ == '__main__':

   n = input("Introduceți numărul n: ")
   if validare(n):
       n = int(n)
       print("Datele introduse corespund restricțiilor impuse.")
       puteri_de_2 = descompunere_in_puteri_de_2(n)
       print("{}".format(" ".join(
           str(p) for p in puteri_de_2)))
   else:
       print("Datele introduse nu corespund restricțiilor impuse.")

</syntaxhighlight>