剑指offer 64与65


剑指offer 64与65

1.面试题64. 求1+2+…+n

method1:递归

class Solution {
public:
    int sumNums(int n) {
        int sum = n;
        if(n==0) return 0;
        sum+=sumNums(n-1);
        return sum;
    }
};

2.面试题65. 不用加减乘除做加法

method1:同样我们可以用三步走的方式计算二进制值相加,5 = [0101],7 = [0111]

相加各位的值,不算进位,得到 010,二进制每位相加就相当于各位做异或操作,101 ^ 111。
计算进位值,得到 1010,相当于各位做与操作得到 101,再向左移一位得到 1010,(101 & 111) << 1。
重复上述两步, 各位相加 010 ^ 1010 = 1000,进位值为 100 = (010 & 1010) << 1 。
继续重复上述两步:1000 ^ 100 = 1100,进位值为 0,跳出循环,1100为最终结果。

class Solution {
public:
    int add(int a, int b) {
        while(b) {
            // 相加
            int tmp = a^b;
            // 进位
            b = (unsigned int) ((a&b)) << 1;
            a = tmp;
        }
        return a;
    }
};

更多内容,订阅公众号

文章作者: light-city
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 light-city !
评论
  目录