题解 | #不用加减乘除做加法#

不用加减乘除做加法

http://www.nowcoder.com/practice/59ac416b4b944300b617d4f7f111b215

题目难度:简单
题目考察:位运算
题目内容:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

题目分析:
这题正解肯定是位运算,但是其实有个巧妙的做法,stl里有可以直接调用函数对vector内数求和,所以可以直接把a,b放进vector内求和即可,代码如下
思路1(stl)

class Solution {
public:
    int Add(int num1, int num2) {
        vector<int>a;
        a.push_back(num1);
        a.push_back(num2);
        //放进num1,num2
        return accumulate(a.begin(),a.end(),0);
        //直接调用求和函数
    }
};

思路2:位运算
异或运算有另一个名字叫不进位的加法,啥意思呢,0^1=1,1^0=1,0^0=0,1^1=0,前三个和加法是一样的结果,后一个在二进制下当前位也是0,但是高位要加1,所以说异或在当前不考虑进位的情况下和加法一样
但是这和本题有啥关系呢,上面说到异或和加法的区别是1^1加法要进位,只要解决了这个问题就能完成加法,下面给出方法
图片说明
下面给出代码

class Solution {
public:
    int Add(int num1, int num2) {
        while (num2) {
        //当num2==0,num1&num2==0所以答案就是num1^num2 
            int temp = num1^num2;
            num2 = (num1&num2)<<1;
            num1 = temp;
            //三变量交换法重新给num1,num2赋值
        }
        return num1;
    }
};
全部评论

相关推荐

废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务