【每日一题】清晰思路牛客另类加法

【每日一题】牛客另类加法


链接: link

题目

描述
给定两个int A和B。编写一个函数返回A+B的值,但不得使用+或其他算数运算符。

测试样例:
1,2
返回:3

思路

这道题不能用常规的加法+来进行计算,那么就需要我们用相应的位运算与操作符运算,而这道题结合递归的思想就可以分两步来进行计算
1.求取两个数相加后当前二进制位的取值(不考虑进位)
2.求取数字相加后进位的取值
3.不断递归运算,直到一个数为0,那么剩下的那个就是相加后的值
这里第一步用到异或运算,第二步两个数进行与运算之后在向左移一位

例子

比如说1和3相加,1的二进制位为00000001,3的二进制位位00000011,先进行第一步 1^3 == 00000001 ^ 00000011 == 00000010 ,接着进行第二步(1&3)<<1 == (00000001 & 00000011)<<1 == 00000010,进行递归处理之后过程为第一步为(00000010 ^ 00000010) == 00000000 , (00000010 & 00000010) << 1 ==00000100 ,这一步中出现了0结果,那么00000100就是相加后的结果4.

代码实现

class UnusualAdd {
public:
    int addAB(int A, int B) {
        // write code here
        if(A == 0) 
            return B;
        if(B == 0)
            return A;
        int a = A ^ B;
        int b = (A&B) << 1;
        return addAB(a, b);
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值