牛客网-两数之和
使用加号简单实现代码#include
using namespace std;
int main() {
// write your code here......
int a,b;
cin>>a>>b;
cout<<a+b;
return 0;
}
不使用加法来实现中的逻辑运算
C++代码不用加法来是实现正数的的加。
- 异或运算(^)意思就是 相同为0,不同为1
- 另外一个就是与运算(&)都为1的时候为1
- 位运算左移就相当于每次乘以2(<< 1)也就相当于进1位,让后进行运算,例如 1001的值位 9那么左移一位 1001<<1=10010 的为 从右往左就是 0+2+0+0+16=18
- 1·第一步通过异或来获取每个位置上不同的值
- 2·通过&与运算来获取都位1的值的位置
- 3·判断是否存在进位
- 4·对当前carry的值做移动一位,来进行进位 *** 作
- 5·将sum的值赋给a
- 6·将carry的值赋给b
- 7·再尽心对应的^和&运算
#include
#include
using namespace std;
class Solution {
public:
int add(int a, int b) {
//两个数值要进行相加-其位置上的数字可以使用^ 运算符 相同位0,不同位1,这样就获得了每个位置上的二进制代码
//但是会存在一个问题,那就是在进位的时候-无法完成进位的 *** 作
//先来第一步
int sum=a^b;//获取每个位置上数值
//第2步考虑进位,什么情况下会有进位 ,那就是都位1的时候要进位,所以我们进行&运算,都为1的位置
int carry=a&b;
//那什么情况下就不进行进位了,那就是 a&b为0的时候,所以在这里我们使用while循环
while(carry!=0){
//左移运算相当于乘法运算,左移K位等于将这个数字乘以2也就进一位
carry=carry<<1;
a=sum;
b=carry;
//记录对应的值
sum=a^b;//再进行一次运算
//继续求当前 a&b的值
carry=a&b;
}
return sum;
}
};
int main() {
int a,b;
cin>>a>>b;
Solution sum;
cout<<sum.add(a,b);
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)