题目链接
LeetCode 面试题65. 不用加减乘除做加法[1]
题目描述
示例1
输入: a = 1, b = 1 输出: 2
提示
题解
但是这里还是用到了加法怎么办呢?因为是二进制,所以不考虑进位求和的话,可以直接采用异或运算。而计算进位的话,直接用位与和左移一位就行了。
在 c++ 和 python 具体实现中,还有几个注意事项:
代码
非递归(c++)
classSolution { public: intadd(inta, intb) { while (b) { intcarry= (unsignedint)(a&b) <<1; a^=b; b=carry; } returna; } };
递归(c++)
classSolution { public: intadd(inta, intb) { returnb?add(a^b, (unsignedint)(a&b)<<1) : a; } };
非递归(python)
classSolution: defadd(self, a: int, b: int) ->int: a&=0xffffffffb&=0xffffffffwhileb!=0: carry= ((a&b) <<1) &0xffffffffa^=bb=carryreturnaifa<0x80000000else~(a^0xffffffff)
投机取巧(python)
classSolution: defadd(self, a: int, b: int) ->int: returnsum([a, b])
参考资料
[1]
LeetCode 面试题65. 不用加减乘除做加法: https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof/
作者简介:godweiyang,知乎同名,华东师范大学计算机系硕士在读,方向自然语言处理与深度学习。喜欢与人分享技术与知识,期待与你的进一步交流~