[容易] 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 };
posted @ 2016-04-29 13:29  Pearl_zju  阅读(155)  评论(0编辑  收藏  举报