题目描述:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路分析:
由于不能直接使用四则运算,想到可以用位运算来解决。首先用异或运算可以求得未进位的相加和,即a^b;那么进位的求法可以通过与操作,得到在那几个位置产生了进位,同时进行左移,即将进位移动到对应位置上,(a&b)<<1。
那么两数相加就将进位的部分和未进位的部分相加即可,但由于不能直接用加法符号,因此通过循环递归做以上操作,直到没有进位,那么当前的未进位数就是所求的结果。
代码:
1 class Solution { 2 public: 3 int Add(int num1, int num2) 4 { 5 6 while(num2!=0) 7 { 8 int Xor = num1^num2; 9 int forward = (num1&num2)<<1; 10 num1 = Xor; 11 num2 = forward; 12 } 13 return num1; 14 } 15 };