您的位置:首页 > 其它

【11】不能使用四则运算求两个整数的和

2014-05-26 12:31 204 查看
题目:给定两个整数a和b,要求不能使用+、-、*、/四则运算求两个数的和

方案:1. 四则运算不能算的情况下,肯定只能借助位运算,所以应该考虑位运算

           2. 假设两个数的二进制位00101 和 10001,两个数相加的过程就是

               第一步:先把二进制的各位相加但不进位,10100;

               第二步:记下进位,00010

               第三步:把前两步的结果相加,得到10110

           3. 分析上述三个过程发现

               第一步实际上就是两个数的异或结果,0+0 = 0,0+1 = 1+0 = 1,1+1 = 0;

               第二步进位就是两个数&的结果再左移一位:(00101 & 10001) << 1 = 00010

               第三步是两数相加,和要求的一样可以递归进行,直到第二个数为0为止。

//循环求两个数的和
int GetSum(int num1, int num2){
while(num2 != 0){
int sum = num1^num2;
int carry = (num1&num2)<<1;
num1 = sum;
num2 = carry;
}
return num1;
}

//递归求两个数的和
int GetSum(int num1, int num2){
if(num2 == 0){
return num1;
}
int sum = num1^num2;
int carry = (num1&num2)<<1;
return GetSum2(sum, carry);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐