不用加号的加法
此博客链接:https://www.cnblogs.com/ping2yingshi/p/14204497.html
不用加号的加法
题目链接:https://leetcode-cn.com/problems/add-without-plus-lcci/
题目
设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。
示例:
输入: a = 1, b = 1 输出: 2
题解
这题我一开就知道肯定要用到什么异或,进位啥的,但是我不会用,正好看看这题。
看了别人的题解,大致意思就是不用加号的两个数相加时,需要把数先变成二进制的数,然后把对二进制的数异或,在有进位时,进位。但是题解我一个都没有看懂。
思路:
对于二进制相加,在没有进位的情况下是异或的结果。在有进位的情况下,进位相当于把二进制数左移一位。所以此题使用异或相加,左移进位。
这里需要注意,判断是否有进位是用与判断是否需要进位,因为只有两个数都为1时才有进位,而两个1为真是与的结果。当没有进位时,说明得到了相加的结果。
注意:当判断是否进位时,是判断a没有改变前的数据和b相与是否有进位。
代码
class Solution { public int add(int a, int b) { while(b!=0){ int temp=a; a=a^b; b=(temp&b)<<1; } return a; } }
结果
出来混总是要还的