Moyenne hexadécimale

Écrivez un programme qui lit des nombres en base hexadécimale fournis par l'utilisateur et qui affiche la partie entière de leur moyenne, également en base hexadécimale.

On rappelle que la base hexadécimale (base 16) est composée des chiffres de 0 à 9, puis des lettres de A à F (on se contentera ici de caractères majuscules).

Contraintes

Entrée

La première ligne de l'entrée contient un nombre N exprimé en base hexadécimale : le nombre de valeurs dont il faut faire la moyenne.

Chacune des N lignes suivantes contient un entier, en base hexadécimale.

Sortie

Vous devez afficher un entier sur la sortie, en base hexadécimale : la partie entière de la moyenne des nombres fournis en entrée.

Attention : le résultat peut comporter plusieurs chiffres.

Exemple

entrée :

C
0
2
4
6
8
A
C
E
10
12
14
16

sortie :

B

Solution

def int16(chaîne: str) -> int:
    """Renvoie l'entier correspondant à 'chaîne' lu en hexadécimal.

    >>> hex("0")
    0

    >>> hex("A")
    10

    >>> hex("FF")
    255

    """
    n = 0
    for c in chaîne:
        n *= 16
        if "0" <= c <= "9":
            n += ord(c) - ord('0')
        else:
            n += ord(c) - ord('A') + 10
    return n

def hexadécimal(n: int) -> str:
    """Renvoie la représentation de n en hexadécimal.

    >>> hexadécimal(15)
    'F'

    >>> hexadécimal(256)
    '100'

    """
    if n == 0:
        return "0"
    chiffres = []
    while n > 0:
        chiffre = n % 16
        n = n // 16
        chiffres.append(chiffre)
    table = "0123456789ABCDEF"
    return "".join(table[chiffre] for chiffre in chiffres[::-1])


n = int16(input())
somme = sum(int16(input()) for _ in range(n))
print(hexadécimal(somme // n))

Commentaires