题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
解题思路:例如5+17转化成二进制即为101+10001
1)不考虑进位101 + 10001 = 10100
2)进位1+1 = 10
3)相加10100+10 = 10110 =22
所以分别算不考虑进位和进位的相加即可,其中不考虑进位相当于异或操作0^0 = 0 0^1 = 1 1^0 = 1 1^1 =0,进位操作相当于先求&再左移1 1&1 = 1 1<<1 = 10
1 class Solution { 2 public: 3 int Add(int num1, int num2) 4 { 5 int sum = 0;//不考虑进位和 6 int carry = 0;//进位结果 7 while(num2 != 0)//直到不产生进位结束循环 8 { 9 sum = num1^num2; 10 carry = (num1&num2)<<1; 11 num1 = sum; 12 num2 = carry; 13 } 14 return num1; 15 } 16 };