头像

生灵灭


访客:620

离线



生灵灭
10个月前

题目描述

不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1

思路:我们知道异或运算就相当于不进位的加法,那么我们只需要找到所得异或和的每一位的进位即可:0+1=0;1+0=0;1+1=1;0+0=0;我们可以看到,这个进位和’&’运算一样而我们所要的结果仅仅是将与运算获得结果向左移一位即可,然后模拟加法即用getSum作为加法递归函数,因为得到异或和还有进位相加,所以利用加法递归调用即可得到。

另外进位必须强制转换成无符号行。

算法:

class Solution {
public:
int getSum(int a, int b) {
if(!b) return a;
int sum = a ^ b;
int carry = ((unsigned int ) (a & b)) << 1;
return getSum(sum, carry);
}
};




生灵灭
11个月前

/做一个循环,将整数和1进行与运算,所得结果和s相加(和1进行与运算所得结果看整数的最后一位,最后一位是1结果为1,是零结果为0,这样就可以一位一位的统计1的个数了),然后将整数向右移一位,继续操作直至整数为0/

    unordered_set<int>primes({2,3,5,7,11,13,17,19});

    int res = 0;
    for(int i = L; i <= R; i++)
    {
        int s = 0;
        for(int k = i; k; k >>= 1)
            s += k & 1;
        if(primes.count(s))
            res += 1;
    }
    return res;