// 面试题65:不用加减乘除做加法 // 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷ // 四则运算符号。 #include <iostream> int Add(int num1, int num2) { int sum, carry; do { sum = num1 ^ num2;//第一步,使用异或求和(没有进位) carry = (num1 & num2) << 1;//第二步,使用与检查同时为1的位,作为进位,左移一位 num1 = sum; num2 = carry; } while (num2 != 0);//第三步,问题变成了sum和进位carry的求和问题,循环,直到没有进位为止 return num1; } // ====================测试代码==================== void Test(int num1, int num2, int expected) { int result = Add(num1, num2); if (result == expected) printf("%d + %d is %d. Passed\n", num1, num2, result); else printf("%d + %d is %d. FAILED\n", num1, num2, result); } int main(int argc, char* argv[]) { Test(1, 2, 3); Test(111, 899, 1010); Test(-1, 2, 1); Test(1, -2, -1); Test(3, 0, 3); Test(0, -4, -4); Test(-2, -8, -10); system("pause"); return 0; }