剑指offer 65:不用加减乘除做加法

在这里插入图片描述
思路
数的运算只有四则运算和位运算,题目不允许进行四则运算,只有通过位运算进行求解。
无进位和 与 异或运算 规律相同,进位 和 与运算 规律相同(并需左移一位)先求异或,进位为与,进位加上异或值为最后的结果,迭代求出即可
!C++中负数不能左移,注意转换成unsigned int!

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

猜你喜欢

转载自blog.csdn.net/weixin_44537258/article/details/114032948
今日推荐