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

不用加减乘除做加法

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

题目描述

描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

解题思路

一般来说题目限定了不得使用+、-、*、/四则运算符号,都可以考虑使用位运算,那么接下来就是如何使用位运算,来计算两个值的和,和的计算,包括进位以及各个位相加,那么可以将其分为两部,首先求各个位置的和,不带进位,再求进位,再相加直到没有进位为0即可以得到两数和

非递归 时间复杂度 O(1) 空间复杂度O(1)

  1. ^ 可以用来求两个数的和(不带进位)
  2. & 可以用来求进位
    // 时间复杂度 O(1) 空间复杂度O(1)
    public int Add(int num1,int num2) {
        // 当num2为0,表示没有进位,没有进位就表示计算完成
        while (num2 != 0) {
            // 求和
            int temp = num1 ^ num2;
            // 求进位
            num2 = (num1 & num2) << 1;
            // 把两数和赋值给num1
            num1 = temp;
        }
        return num1;
    }

举个例子

图片说明

递归 时间复杂度 O(1) 空间复杂度O(1)

    public int Add(int num1,int num2) {
        if(num2 == 0){
           return num1;
        }
        return Add(num1^num2, (num1&num2)<<1);
    }
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 18:22
投了几百份简历,专业和方向完全对口,都已读不回。尝试改了一下学校,果然有奇效。
steelhead:这不是很正常嘛,BOSS好的是即便是你学院本可能都会和聊几句,牛客上学院本机会很少了
点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司8个岗位
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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