additionner 2 nombres positives sans utiliser opérator plus

additionner sans operator

a marqué ce sujet comme résolu.

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 veux le faire en binaire

Comme on te l’a répété, il serait important de donner l’énoncé complet de ton problème et le contexte de l’exercice.

Sinon, on va continuer à spéculer.

@SpaceFox: tu me trouves 2 x 3-inputs XOR gate + 3 x 2-inputs AND gate ?

Je l’ai fait en Python avec deux petites fonctions lambda avec le ^ et le &

+0 -0

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 + 1
for _ in range(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="")

Qui donne:

 
01010101

je veux le faire en binaire

domxav17

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.

@entwanne, tu utilises l’addition, même si tu le fais simulé en binaire.

PierrotLeFou

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