栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

不用加减乘除做加法(C++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

不用加减乘除做加法(C++)

不用加减乘除做加法 描述

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

数据范围:两个数都满足−10≤n≤1000
进阶:空间复杂度 O(1),时间复杂度 O(1)

示例1
输入:
1,2
返回值:
3
示例2
输入:
0,0
返回值:
0
思路/解法 方式一

可参考学习链接:https://blog.csdn.net/qq135595696/article/details/124460541

我们可以将其想象为两个数的二进制相加,那么关键就在于如果两个数相同的位都为1,那么是应该进位的(即当前位为0,往前一位进1),我们可以使用位运算符将进位(都为1)和不需要进位(一个为0,一个为1)的操作相分离。通过两个数(转化为二进制观察)异或(^)操作,可以取出所有不需要进位的位,然后对于不需要进位的数,只需要直接转为相应十进制就可(即因为不需要进位,所以两个数异或,就是两数相加)。而对于需要进位的数,我们使用让两数按位与(&)操作,然后左移运算(<<)1,那么得到的结果就是相应需要进位的数,然后将进位的数加入相应加入累加到上一次的计算结果,重复上述操作,直至进位为0。

class Solution {
public:
    int Add(int num1, int num2) {
        while(num2 != 0)
        {
            int temp = num1;
            num1 = num1 ^ num2;
            num2 = (temp & num2) << 1;
        }
        return num1;
    }
};
方式二

简单的思路,循环其中的一个值,每次自减1,让另外一个值自增。

class Solution {
public:
    int Add(int num1, int num2) {
        while(num1 != 0)
        {
            num2 = num1>0?num2+1:num2-1;
            num1 = num1>0?num1-1:num1+1;
        }
        return num2;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931884.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号