美文网首页
整数 a 加 b (lintcode:a-b-problem)

整数 a 加 b (lintcode:a-b-problem)

作者: v1coder | 来源:发表于2017-12-31 11:15 被阅读0次

给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
a 和 b 都是32位整数。可以使用位运算符。

def aplusb(a, b):
    num_list = []
    num_list.append(a)
    num_list.append(b)
    return sum(num_list)

写一个函数,求两个正整数之和,不得使用 + 等数学运算符,不得使用 sum() 函数。

def aplusb(a, b):
  sum1 = a ^ b
  carry = (a & b) << 1
  while carry:
#    other_sum = sum1 ^ carry
#    carry = (sum1 & carry) << 1
#    sum1 = other_sum
    sum1, carry = sum1 ^ carry, (sum1 & carry) << 1  #:直接赋值,不借助中间变量
  else :
    return sum1

print aplusb(11, 17)

思路和原理:

对数字做运算,除了四则运算之外,也就只剩下位运算了。位运算是针对二进制的,所以我们用二进制和位运算尝试下实现加法。

加法可分为同位相加和进位。

比如 7+18,
第一步,同位相加不进位。个位上7+8等于5(不考虑进位),十位上0+1等于1,最后结果是15。
第二步,进位。7+8有进位,进位结果是10。
第三部,把前面两步结果相加,15+10=25,正好等于7+18的结果。
那么接下来的问题就是尝试用二进制和位运算实现同位相加和进位。

二进制同位相加(不考虑进位):
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0

很明显可以用位运算的按位异或“^”来代替:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0

二进制进位:
0 + 0 无进位
0 + 1 无进位
1 + 0 无进位
1 + 1 有进位

可以用按位与“&”来代替:
0 & 0 无进位
0 & 1 无进位
1 & 0 无进位
1 & 1 有进位

而且在位运算中,我们有"<<"用来左移位,也就是进位。

基于以上,我们有了两个表达式:
x^y #同位相加
(x&y)<<1 #进位操作

把以上两步的结果再用以上的方法相加,如此迭代,当“进位操作”的结果为零的时候,“同位相加”的结果就是最终的结果。


lintcode 原题

资料:
位运算实现加法
位操作实现四则运算

20171231

相关文章

  • 整数 a 加 b (lintcode:a-b-problem)

    给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。a 和 b 都是32位整数。可以使用位运算符。 ...

  • A+B问题

    lintcode算法题 1.A + B 问题 描述给出两个整数 a和 b, 求他们的和。你不需要从输入流读入数据,...

  • OJ Lintcode 将整数A转换为B

    如果要将整数A转换为B,需要改变多少个bit位?您在真实的面试中是否遇到过这个题?Yes样例如把31转换为14,需...

  • 2.2.2 产生有规律的序列

    1.等差数列 a:b表示从a开始,逐项加1(或减1),知道b为止. x<-1:30 #a为整数,b为整数y<-2....

  • [容易]1.A+B问题

    我是小小强,这是我的第5篇原创文章,阅读需要大约10分钟。 题目 LintCode:A+B问题 描述 给出两个整数...

  • [LintCode]整数排序

    原文发表在我的博客:整数排序求关注、求交流、求意见、求建议。 问题 LintCode:整数排序 描述 给一组整数,...

  • 数据类型

    整数 int类型 整数类型即位整数 浮点类型 浮点类型了解为小数类型 字符串 字符串类型一定要加“” b ="sd...

  • 给定非负整数c 求是否有a的平方加b的平方等于c

    给定非负整数c 求是否有a的平方加b的平方等于c

  • OJ:lintcode 整数排序

    给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。您在真实的面试中是否遇...

  • LintCode 1. A + B Problem

    原题 LintCode 1. A + B Problem Description Write a function...

网友评论

      本文标题:整数 a 加 b (lintcode:a-b-problem)

      本文链接:https://www.haomeiwen.com/subject/itbogxtx.html