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

不用加减乘除做加法

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

  1. 计算机中所有数字均已补码表示,这样即使遇到了负数也会自动转化成加法运算。
  2. 这个规律是画图发现的,所以移位得时务必转换为无符号数在进行计算。否则结果错误。
  3. 终止条件是num2(最后会被认为是进位)进位为0自然被认为是停止运算了。
  4. 结果最后就是num1^=num2;
class Solution {
public:
    int Add(int num1, int num2) {

        //当进位为0的时候,标记着运算结束了。
        while(num2!=0){
            // 负数左移会在低位补1,所以转化为无符号整数
            int c = ((unsigned int)(num1&num2))<<1;
            num1^=num2;//最终得运算结果会给num1;
            num2 = c;//num2承接进位

        }

        return num1;
    }
};
剑指Offer 文章被收录于专栏

剑指offer的解析结合

全部评论

相关推荐

SHC2:春招先狠狠投递,然后你看看能不能申请香港新加坡的一年制master,花不了多少钱,或者现在赶紧去刷一段实习。HR专业考研没必要
点赞 评论 收藏
分享
smile丶snow:感觉可以加一些ai相关的内容吧。现在面试很少能逃掉这些问题。羡慕里面感觉缺少一个项目背景。比如第二个项目后台管理系统…你为什么要做这个后台管理系统呢?是为了解决什么问题。比如你管理一个商品列表的增加减少。需要一个背景吧。哦或者说你第一个电子书那个是c端的,你肯定需要一个管理系统吧,那就是第二个后台管理系统,但这两个难道不应该是一个项目吗?可以稍微包装一下,最起码让人看着不是玩具项目。个人观点。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务