剑指 Offer 65. 不用加减乘除做加法
Jhon_shisan · · 个人记录
==剑指 Offer 65. 不用加减乘除做加法==
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
输入: a = 1, b = 1
输出: 2
思路:位运算
a(i)为a二进制每一位,b(i)为b二进制每一位。
本体思路是把a+b换为n+c,a+b每一位加起来可能进位,也可能不进位。n为每一位相加没有进位和,c为每一位相加进位的和。
当c=0时,a+b = n。
根据规律可以看出,无进位和为^(异或),进位和为(a&b)<<1。
a+b=n+c 一直换 直到c=0。
class Solution {
public int add(int a, int b) {
while(b!=0)
{
int c = (a & b)<< 1;
a = a^b;
b = c;
}
return a;
}
}