负二进制数相加【力扣1073】

最初看到这题的时候,我很懵逼,世上咋还会有基数是负数的情况?但仔细想想十进制加法,无非从低位到高位遍历两个数num1和num2,num1【i】表示数字num1的第i位,carry表示进位,sum=num1【i】+num2【i】+carry:

  • 若sum<10,则answer【i】=sum,carry=0;
  • 否则,answer【i】=sum-10,carry=1;

解释为啥进位的时候carry要等于1:sum大于等于10的时候,说明超出了第i位的表示范围,必须向高位i+1进位。此时第i位表示的数换成十进制是sum*10^i=(sum-10)*10^i + 10*10^i,10*10^i是超出部分,这部分无非就是向i+1位进1。

同理二进制加法

sum*2^i = (sum-2)*2^i + 2*2^i

  • 若sum<2,则answer【i】=sum,carry=0;
  • 否则,answer【i】=sum-2,carry=1;

同理-2进制加法

2*(-2)^i = (-1)*(-2)*(-2)^i

(-1)*(-2)^i = 1*(-2)^i +(-2)*(-2)^i

3*(-2)^i = 1*(-2)^i + (-1)*(-2)*(-2)^i

  • 若sum=0,1,则answer【i】=sum,carry=0;
  • 若sum=2,则answer【i】=0,carry=-1;
  • 若sum=-1,则answer【i】=1,carry=1;
  • 若sum=3;则answer【i】=1,carry=-1;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值