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

不用加减乘除做加法

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);
    }
全部评论

相关推荐

行云流水1971:你的简历已经有不错的内容基础,但在岗位匹配度、成果量化、逻辑分层上还有优化空间,我结合产品 / 金融科技类岗位偏好帮你调整: 一、现有问题 & 优化方向 信息冗余:课程 / 学生工作与目标岗位关联弱,可精简; 成果颗粒度不足:部分数据缺少 “对比基准”(比如 “效率提升” 没说之前的情况); 岗位标签弱:产品岗核心能力(如需求闭环、PRD 撰写)体现不够突出。 二、优化后简历(以 “金融科技产品岗” 为例) 教育经历 2023.09-2027.06 郑州轻工业大学(公办一本) | 软件工程 | 本科 核心课程:Java 程序设计、数据库原理、Python(匹配产品岗 “技术理解” 需求) 学习成果:专业核心课 90+,获校级一等奖学金; 学生工作:院学生会主席,统筹 6 场校级活动(覆盖 2000 + 人次),锻炼跨部门协作与项目统筹能力。 实习经历
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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