算法code-01
Posted xiaohuia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法code-01相关的知识,希望对你有一定的参考价值。
A+B Problem
题目:使用位运算求a和b的和,两个整数a和b,其中0<=a,b<=100。
分析:a+b=a^b+(a&b)<<1
其中a^b为异或运算,本质上可以看作不进位加法;后面的a&b为与运算,相同位上都为1则结果才为1,其它情况则结果为0,我们只需要将与运算左移一位,则可以看成是进位运算。所以,两者结合就是完成的加法运算。
由于题目中要求只用位运算求和,由于a+b和(a&b)<<1也是两数相加,而且a+0=a,所以我们可以将上述思路最后的“两者结合”用递归或循环的方式完成。直到递归或循环到b=0,这时return a;即可。
代码:
//递归实现
public class Solution01 {
public int sum(int a,int b){
if (b == 0){
return a;
}
int sum = a ^ b;
int carry = (a & b) << 1;
return sum(sum,carry);
}
}
//循环实现
public class Solution02 {
int sum(int a,int b){
int sum = 0,carry = 0;
while (b!=0){
sum = a^b;
carry = (a&b)<<1;
a = sum;
b = carry;
}
return a;
}
}
以上是关于算法code-01的主要内容,如果未能解决你的问题,请参考以下文章