题目来源: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 };
时间: 2024-07-31 00:17:37