2585 - Get By Mask

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerință

Se dau două numere n (întreg pe 32 de biți cu semn) și k natural. Aflați valoarea obținută cu ultimii k biți ai lui n.

Date de intrare

Programul citește de la tastatură numerele n și k.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Programul va afișa pe ecran valoarea obținută. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."

Restricții de precizări

  • 1 ⩽ k ⩽ 30
  • numărul n se poate memora pe 32 de biți cu semn

Exemplul 1

Intrare
14 3
Ieșire
Datele introduse corespund restricțiilor impuse.
6

Exemplul 2

Intrare
37 3
Ieșire
Datele introduse corespund restricțiilor impuse.
5

Rezolvare ver. 1

def validare(n, k):
    return k.isdigit() and 1 <= int(k) <= 30 and -pow(2, 31) <= int(n) <= pow(2, 31) - 1


def getbymask(n, k):
    # construim masca de k biti cu valoare 1
    mask = (1 << k) - 1

    # obtinem ultimii k biti ai lui n
    result = n & mask

    # afisam valoarea finala a numarului
    print(result)


if __name__ == "__main__":
    n, k = input().split()  # citim n și k de la tastatură
    if validare(n, k):
        n = int(n)
        k = int(k)
        print("Datele de intrare corespund restricțiilor impuse.")
        getbymask(n, k)

    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")