2624 - Inv Bits

De la Universitas MediaWiki

Cerință

Dat fiind un număr natural n, să se determine numărul natural m care are are proprietatea că are în reprezentarea în baza 2 biți de 1 pe pozițiile unde n are biți de 0 și are biți de 0 pe pozițiile unde n are biți de 1. De exemplu, dacă n = 346, atunci m = 165, deoarece n se reprezintă în baza 2 prin 101011010, iar m prin 010100101.

Date de intrare

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

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 numărul m. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."

Restricții de precizări

  • 0 ⩽ n ⩽ 10000

Exemplul 1

Intrare
346
Ieșire
Datele introduse corespund restricțiilor impuse.
165

Exemplul 2

Intrare
255
Ieșire
Datele introduse corespund restricțiilor impuse.
0

Rezolvare ver. 1

def validare(n):
    """Funcție pentru validarea unui număr n."""
    return n.isdigit() and 0 <= int(n) <= 10000


def transform(n):
    """Funcție pentru transformarea unui număr n în forma sa complementară în baza 2."""
    binary_n = bin(n)[2:]  # convertim numarul n in reprezentarea sa in baza 2 (binara)
    binary_list = list(binary_n)  # transformam sirul binar intr-o lista de caractere

    inverted_list = ["1" if x == "0" else "0" for x in binary_list] # initializam un nou sir de caractere cu caracterele opuse
    inverted_binary_n = "".join(inverted_list)  # convertim noul sir de caractere intr-un numar intreg
    m = int(inverted_binary_n, 2)
    
    print("Numarul m este:", m) # afisam numarul calculat


if __name__ == "__main__":
    n = input("Introduceți numărul n: ")  # citim n de la tastatură

    if validare(n):
        n = int(n)

        print("Datele introduse corespund restricțiilor impuse.")
        transform(n)

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