3348 - Suma Puteri 2: Difference between revisions
No edit summary |
Vardai Erwin (talk | contribs) |
||
Line 25: | Line 25: | ||
:32 | :32 | ||
== Rezolvare == | ==Rezolvare== | ||
<syntaxhighlight lang="python" line | === Rezolvare ver. 1=== | ||
def | <syntaxhighlight lang="python" line> | ||
def validare(n): | |||
n = int( | return n.isdigit() and 1 <= int(n) < 231 | ||
while n > 0: | 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] | |||
print(" | |||
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>