[容易] A + B 问题
题目来源:http://www.lintcode.com/zh-cn/problem/a-b-problem/
直接return a + b;也可以通过测试,但这样就没意思了。
1 class Solution {
2 public:
3 /*
4 * @param a: The first integer
5 * @param b: The second integer
6 * @return: The sum of a and b
7 */
8 int aplusb(int a, int b) {
9 // write your code here, try to do it without arithmetic operators.
10 // 利用异或运算,异或运算有一个别名叫做:不进位加法
11 // a ^ b就是a和b相加之后,该进位的地方不进位的结果
12 // a和b里都是1的地方需要进位
13 // a & b就是a和b里都是1的那些位置,a & b << 1 就是进位之后的结果。
14 // 所以:a + b = (a ^ b) + (a & b << 1)
15 // 令a' = a ^ b, b' = (a & b) << 1
16 // 可以知道,这个过程是在模拟加法的运算过程,进位不可能一直持续,所以b最终会变为0。
17 // 因此重复做上述操作就可以求得a + b的值
18 while (b != 0) {
19 int _a = a ^ b;
20 int _b = (a & b) << 1;
21 a = _a;
22 b = _b;
23 }
24 return a;
25 }
26 };
-------------------------------------------------
原创博客 转载请注明出处http://www.cnblogs.com/hslzju
-------------------------------------------------