Python二进制数求和

输入

  • 命令行参数规范如下:
$ python3 binary_sum.py <binary ...> 
  • <binary ...>:2~7个二进制数,取值范围为0b1~0b1111111111111,最大13 位。
  • 【提示】sys.argv 是字符串数组,中间以空格分隔。

 输出

  • 按照二进制形式将计算结果输出至stdout,范例如下:
$ python3 sum.py 101 110 
1011 $ python3 sum.py 1000000001110 10111101100 
1010111111010 $ python3 sum.py 1000000001110 10111101100 101 110 
1011000000101 

我们可以设计这样的算法来计算:

把 aa 和 bb 转换成整型数字 xx 和 yy,在接下来的过程中,xx 保存结果,yy 保存进位。
当进位不为 00 时
计算当前 xx 和 yy 的无进位相加结果:answer = x ^ y
计算当前 xx 和 yy 的进位:carry = (x & y) << 1
完成本次循环,更新 x = answer,y = carry
返回 xx 的二进制形式
为什么这个方法是可行的呢?在第一轮计算中,answer 的最后一位是 xx 和 yy 相加之后的结果,carry 的倒数第二位是 xx 和 yy 最后一位相加的进位。接着每一轮中,由于 carry 是由 xx 和 yy 按位与并且左移得到的,那么最后会补零,所以在下面计算的过程中后面的数位不受影响,而每一轮都可以得到一个低 ii 位的答案和它向低 i + 1i+1 位的进位,也就模拟了加法的过程。

代码如下:

import sys
def binary_sum(a, b) -> str:
    x, y = int(a, 2), int(b, 2)
    while y:
        answer = x ^ y  #add with no carry
        carry = (x & y) << 1 #digitwise AND operation and left shift
        x, y = answer, carry
    return bin(x)[2:]
def add(argv):
    temp = "0"
    for i in range(1, len(argv)):
        temp = binary_sum(temp, argv[i])
    return temp
print(add(sys.argv))

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

理工男头发不值钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值