Même si on veut simuler un circuit électronique, l’addition se fait à base d’un circuit appelé « demi-additionneur », du coup on est limite sur la définition.
S’il s’agit juste du symbole + qui est interdit tu peux faire appel à la méthode __add__ ou la fonction operator.add.
Sinon je rejoins les autres solutions évoquées à base de soustraction ou de sum.
Mais peut-être qu’il s’agit d’une question plus complexe que ça et que tu veuilles reconstruire une addition à partir de « rien » (en traitant le nombre comme une séquence de chiffres et ne connaissant que le successeur de chaque chiffre).
À toi de défini plus précisément quel est le besoin.
"<S’il s’agit juste du symbole + qui est interdit tu peux faire appel à la méthode add ou la fonction operator.add.
Sinon je rejoins les autres solutions évoquées à base de soustraction ou de sum.
Mais peut-être qu’il s’agit d’une question plus complexe que ça et que tu veuilles reconstruire une addition à partir de « rien » (en traitant le nombre comme une séquence de chiffres et ne connaissant que le successeur de chaque chiffre).>"
Je ne te donne pas la solution. On t’a donné plusieurs indices sur ce site et d’autres.
Voici ttout de même comment obtenir les bits d’un nombre si tu veux vraiment simuler un additionneur.
registre = []
nombre = 85# 64 + 16 + 4 + 1for _ inrange(8): # Je suppose au maximum 8 bits.
registre.append(nombre&1)
nombre >>= 1
registre.reverse() # Remettre les bits dans le bon ordre.print(*registre, sep="")
Donc il te faut considérer ton nombre comme une séquence de bits.
Si on ne considère que les entiers positifs, tu peux avoir la représentation (chaîne de caractères) d’un nombre sous forme de bits à l’aide de l’expression format(n, 'b').
Tu peux ensuite transformer cette chaîne pour obtenir une liste de bits (liste de chiffres) et travailler dessus.
Avec deux listes de bits [1, 0, 1] et [1, 1] (0b101 et 0b11 soit 5 et 3) tu peux ensuite procéder à l’addition en la posant comme tu le ferais à l’école.
101
+ 11
======
= ???
En partant donc des bits les plus à droite, tu additionnes d’abord 1 et 1, ça te donne 0 avec une retenue de 1.
Ensuite 0 et 1 avec la retenue de 1, à nouveau 0 et une retenue de 1.
Ensuite 1 et la retenue, à nouveau 0 et une retenue de 1.
Puis plus que la retenue, 1.
101
+ 11
======
= 1000
Tu peux implémenter cet algorithme dans ton programme et tu te rends compte que tu n’as que 6 cas différents à gérer :
0 + 0 sans retenue → 0 sans retenue
0 + 0 avec retenue → 1 sans retenue
1 + 0 sans retenue → 1 sans retenue
1 + 0 avec retenue → 0 avec retenue
1 + 1 sans retenue → 0 avec retenue
1 + 1 avec retenue → 1 avec retenue
(que tu peux simplifier en 4 cas différents si tu intègres la retenue comme un nombre de la somme)
Tu obtiens dans l’exemple ici [1, 0, 0, 0] en résultat.
Tu peux ensuite à nouveau transformer cette liste en nombre (en passant par une chaîne de caractères concaténant les bits et en la convertissant via int('1000', 2) par exemple) et tu obtiens 8.
Non, j’ai justement divisé en cas pour montrer que l’addition en tant que telle n’était pas utilisée.
La question n’est pas de savoir « avec quoi ça se fait », plusieurs solutions ont déjà été évoquées, mais d’identifier quel est le réel problème à résoudre.
Je répondais donc sur le fait de recoder un algorithme d’addition.
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte