领扣算法简单------A + B 问题---js和java版

本文介绍了一种不使用传统算术运算符实现两数相加的方法,通过位运算中的异或和与运算,结合递归调用,巧妙地实现了加法运算。适用于32位整数加法,提供JS和Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给出两个整数 aa 和 bb , 求他们的和。

样例

样例 1:

输入:  a = 1, b = 2
输出: 3	
样例解释: 返回a+b的结果.

样例 2:

输入:  a = -1, b = 1
输出: 0	
样例解释: 返回a+b的结果.

挑战

显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?(不使用++等算数运算符)

说明

a和b都是 32位 整数么?

  • 是的

我可以使用位运算符么?

  • 当然可以

注意事项

你不需要从输入流读入数据,只需要根据aplusb的两个参数a和b,计算他们的和并返回就行。

js语言

/**
 * @param a: An integer
 * @param b: An integer
 * @return: The sum of a and b 
 */
const aplusb = function (a, b) {
    // write your code here
    
    //return a+b;
    
     if(b===0){
        return a;
    }
    if(a===0){
        return b;
    }  
    var sum = a^b;
    var carry =(a&b)<<1;
    return aplusb(sum,carry); 
}

分析:使用位运算进行加法运算。摘自https://www.cnblogs.com/houjun/p/4908725.html

对于二进制的加法运算,若不考虑进位,则1+1=0,1+0=1,0+1=1,0+0=0,通过对比异或,不难发现,此方法与异或运算类似。因而排出进位,加法可用异或来实现。然后考虑进位,0+0进位为0,1+0进位为1,0+1进位为0,1+1进位为1,该操作与位运算的&操作相似。

  那么加法运算可以这样实现:

  1)先不考虑进位,按位计算各位累加(用异或实现),得到值a;

  2)然后在考虑进位,并将进位的值左移,得值b,若b为0,则a就是加法运算的结果,若b不为0,则a+b即得结果(递归调用该函数)。

注意:js中判断等于有"=="和"===",在这进行下区分:

==       两边值类型不同的时候,要先进行类型转换,再比较。

===     不做类型转换,类型不同的一定不等。

java语言

public class Solution {
    /**
     * @param a: An integer
     * @param b: An integer
     * @return: The sum of a and b 
     */
    public int aplusb(int a, int b) {
        // write your code here
        
        //return a+b;
        
        if(b==0){
            return a;
        }
        if(a==0){
            return b;
        }  
        int sum = a^b;
        int carry =(a&b)<<1;
        return aplusb(sum,carry);
    }
}

分析:同上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wcc_Learning

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值