Comment puis-je ajouter, soustraire et comparer des nombres binaires en Python sans les convertir en décimal ?
Réponses
Trop de publicités?'''
I expect the intent behind this assignment was to work in binary string format.
This is absolutely doable.
'''
def compare(bin1, bin2):
return bin1.lstrip('0') == bin2.lstrip('0')
def add(bin1, bin2):
result = ''
blen = max((len(bin1), len(bin2))) + 1
bin1, bin2 = bin1.zfill(blen), bin2.zfill(blen)
carry_s = '0'
for b1, b2 in list(zip(bin1, bin2))[::-1]:
count = (carry_s, b1, b2).count('1')
carry_s = '1' if count >= 2 else '0'
result += '1' if count % 2 else '0'
return result[::-1]
if __name__ == '__main__':
print(add('101', '100'))
Je laisse le func de soustraction comme un exercice pour le lecteur.
Par exemple, 00000011 - 00000001 = 00000010
Vous pouvez enlever les zéros et les ajouter à nouveau après avoir fait votre calcul ! Cela fonctionne très facilement.
Si votre binaire est stocké sous forme de chaîne, vous pouvez le convertir en int, ce qui supprimera automatiquement les zéros au début. Une fois que vous avez votre réponse, vous pouvez la retransformer en chaîne et ajouter les zéros au début.
Je ne sais pas si c'est utile, mais je laisse ma solution ici :
class Solution:
# @param A : string
# @param B : string
# @return a strings
def addBinary(self, A, B):
num1 = bin(int(A, 2))
num2 = bin(int(B, 2))
bin_str = bin(int(num1, 2)+int(num2, 2))
b_index = bin_str.index('b')
return bin_str[b_index+1:]
s = Solution()
print(s.addBinary("11", "100"))
Je pense que vous êtes confus sur ce qu'est le binaire. Le binaire et le décimal sont simplement des représentations différentes d'un nombre - par exemple, 101 en base 2 et 5 en base 10 sont le même nombre. Les opérations d'addition, de soustraction et de comparaison opèrent sur des nombres - 101 base 2 == 5 base 10 et l'addition est la même opération logique quelle que soit la base dans laquelle vous travaillez.
- Réponses précédentes
- Plus de réponses