您的位置:首页 > 其它

lintcode-easy-A+B problem

2016-02-18 13:25 246 查看
Write a function that add two numbers A and B. You should not use
+
or any arithmetic operators.

Example

Given
a=1
and
b=2
return
3


Note

There is no need to read data from standard input stream. Both parameters are given in function
aplusb
, you job is to calculate the sum and return it.

Challenge

Of course you can just return a + b to get accepted. But Can you challenge not do it like that?

Clarification

Are a and b both
32-bit
integers?

Yes.

Can I use bit operation?

Sure you can.

这道题相当于用编程语言写一个32位加法器,记不住可以搜一下

加法器原理:

sum = a^b^carry

carry = (a^b) | carry&(a^b)

逐个bit操作,把每一位的结果加到变量中去

这道题没有要求考虑溢出,不过面试可能有必要问一下,虽然我还没面过。

class Solution {
/*
* param a: The first integer
* param b: The second integer
* return: The sum of a and b
*/
public int aplusb(int a, int b) {
// write your code here, try to do it without arithmetic operators.

int carry = 0;
int sum = 0;
for(int i = 0; i < 32; i++){
sum = sum | (((a >> i) & 1) ^ ((b >> i) & 1) ^ carry) << i;
carry = ((a >> i) & 1) & ((b >> i) & 1) | ((((a >> i) & 1) ^ ((b >> i) & 1)) & carry);
}

return sum;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: