题目描述:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
分析:
"^"是不带进位的加法。
"&"可以得到所有进位位组成的数。
我们只需要将不进位加后的数与所有进位位组成的数右移一位的结果相加就可以得到和。
不过我们在上面一步的加法过程中,我们也只能用"^"不进位的加法。
所以我们要循环之前的步骤直到不出现进位的情况,这样我们的"^"就和普通加法一样了。
代码:
1 class Solution { 2 public: 3 int Add(int num1, int num2) { 4 int a = num1 ^ num2; // 不进位加 5 int b = (num1 & num2) << 1; // 要进位位组成的数右移一位 6 while(b) { // 不进位加后的数与要进位位组成的数右移一位的结果相加 7 int c = a ^ b; 8 b = (a & b) << 1; 9 a = c; 10 } 11 return a; 12 } 13 };