算法Week02.03 - LeetCode 371. Sum of Two Integers

来源:互联网 发布:知乎怎么修改关注话题 编辑:程序博客网 时间:2024/06/05 19:21

题目大意

实现两个整数的加法操作,但不准使用 +- 操作。

解题思路

乍一看觉得有些不知所措…

不过转念一想,啊哈,数电学的逻辑操作终于用得上场了…\笑cry。数电全加器的加法是逐位的,在程序语言里我们不方便做到,不过可以采用如下操作:

  1. A xor B = C
  2. A & B = Carry
  3. if Carry != 0 then A <- C, B <- (Carry << 1) jump to 1
    else stop

注意将进位赋值给B时要左移一位。

完整代码

class Solution {public:    int getSum(int a, int b) {        int sum = a ^ b;        int carry = (a & b) << 1;        while (carry) {            a = sum;            sum = a ^ carry;            carry = (a & carry) << 1;        }        return sum;    }};
0 0
原创粉丝点击