2735 - Insert Biti
Cerință
Se citesc trei numere naturale n m i. Să se schimbe valorile biților lui n de la poziția i spre stânga, cu valorile biților lui m de la 0 până la cel mai semnificativ bit de 1 din m și apoi să se afișeze n.Numerotare biților se face de la dreapta spre stânga începând de la 0.
Date de intrare
Programul citește de la tastatură numerele n, m și i, separate prin spații.
Date de ieșire
Programul citește de la tastatură numerele n, m și i, separate prin spații.
Restricții de precizări
- numerele n, m sunt se reprezintă pe 64 de biți, fără semn.
- pozițiile biților sunt indexate de la 0.
Exemplul 1
- Intrare
- 5 6 2
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 25
Exemplul 2
- Intrare
- 10101 111 3
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 23
Rezolvare ver. 1
<syntaxhighlight lang="python" line="1" start="1"> def validare(n, m, i):
return all.isdigit() and 1 <= int(n), int(m), int(i) <= 64
def insertbiti(n, m , i):
- Gasim poziția celui mai semnificativ bit de 1 din m
poziția = m.lg_bit() - 1
- Creăm o mască pentru a șterge biții lui n
mask = (1 << i) - 1
- Ștergem biții lui n de la poziția i în stânga
n &= mask
- Copiem biții lui m în n
n |= (m >> (poziția + 1 - i)) << i
- Afișăm n-ul rezultat
print("Rezultatul este:", n)
if __name__ == "__main__":
n = int(input("Introduceti n: ")) m = int(input("Introduceti m: ")) i = int(input("Introduceti i: "))
if validare(n, m, i):
n = int(n) m = int(m) i = int(i)
print("Datele introduse corespund restricțiilor impuse.") insertbiti(n, m, i)
else:
print("Datele introduse nu corespund restricțiilor impuse.")
</syntaxhighlight>