您的位置:首页 > Web前端

《剑指offer》写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

2017-03-04 12:40 579 查看
弱菜刷题还是刷中文题好了,没必要和英文过不去,现在的重点是基本代码能力的恢复。

【题目】

剑指offer

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

【思路】

直觉想到用二进制的位运算。最后写出来是一个迭代的过程。

每次迭代先计算x和y的和但不处理进位,那么相当于做异或,得到res1

然后处理进位问题,相当于计算与运算,得到res2

那么res2左移1位,再加到res1上,则整个运算的最终结果转化为res1+(res2<<1)

因为res2做左移,总会减小到0,那时候的res1就是最终结果

class Solution{
public:
int Add(int x, int y){
int sum;
int carry;

while (true){
sum = x^y;
carry = (x&y) << 1;
y = carry;
x = sum;
if (y == 0){
break;
}
}
return sum;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐