题目描述

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

 思路:两个数的和为Si = Xi 异或 Yi 异或 Ci(Ci为进位),异或我们可以用^来计算,如果计算进位,以及计算完进位之后如何再继续计算是我遇到的问题。

1.求两个数的异或值

2.两个数相与,再左移一位就是进位

3.如果进位为0,那么计算得到的异或值即为最终结果,否则说明仍然有进位,需要继续1 2 步骤

class Solution {
public:
    int Add(int num1, int num2)
    {
        int numyu = -1;
        int numyh = -1;
        while(num2){
            numyh = num1 ^ num2;
            numyu = (num1 & num2) << 1;  //进位
            num1 = numyh;
            num2 = numyu;
        }
        return num1;
    }
};

 简化代码:

class Solution {
public:
    int add(int a, int b) {
        unsigned int carry = (a & b);
        int sum = a ^ b;
        int jinwei = carry<<1;
        while(jinwei!=0){
            carry = (jinwei & sum);
            sum ^= jinwei;
            jinwei = carry<<1;
        }
        return sum;
    }
};

 简化代码:

class Solution {
public:
    int add(int a, int b) {
        while(b){
            unsigned int carry = (a & b);
            a = a ^ b;
            b = carry << 1;
        }
        return a;
    }
};

 

 

 

posted on 2020-10-22 09:12  曹婷婷  阅读(71)  评论(0编辑  收藏  举报