# -*- encoding:utf8 -*-

# Définition d'une pile

class Stack(object) :
    """
    Implémentation d'une pile
    La représentation interne de la pile est une liste.
    Les éléments sont empilés et dépilés en fin de liste.
    """

    def __init__(self):
        
        self.items = []

    def push(self, item):
        """
        push(obj item) --> None
        Empile l'élément <item> dans la pile.
        """

        self.items.append(item) # le haut de la pile correspond à la fin de la liste items

    def pop(self):
        """
        pop() --> object
        Retourne l'élément qui se trouve au sommet de la pile et None
        si la pile est vide.
        """

        if not self.isEmpty():
            item = self.items[-1]
            del(self.items[-1])
            return item
        else:
            return None

    def isEmpty(self):
        """
        isEmpty() --> Bool
        Retourne True si la pile est vide et False sinon.
        """

        return self.getSize() == 0

    def getSize(self):
        """
        getSize() --> int
        Retourne la taille de la pile.
        """
        
        return len(self.items)
    
    def printContent(self):
        """
        printContent() --> None
        Affiche les éléments de la pile du dernier au premier entré.
        """

        n = self.getSize()-1
        while n >= 0:
            print(self.items[n], end=" ")
            n -= 1
        
# Programme de test

if __name__ == "__main__":

    n = int(input("Entrez un entier positif : "))

    pile = Stack()

    while n > 0:
        digit = n % 2
        pile.push(digit)
        n = n//2

    print("La représentation binaire de cet entier est : ")

    pile.printContent()

    input("Appuyez sur une touche pour fermer la fenetre !")
