[leetcode]--371. Sum of Two Integers

Question 371:

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

不用算术运算符 + 和 - 来计算出两个整数的和。

Example:

Given a = 1 and b = 2, return 3.

解决思路:求整数和,但是题目说了,不能用算术运算符,所以只能另寻他法。想了半天,或许逻辑运算符可以解决:

1)对两个数据进行与操作,求出对应二进制数据需要进位的位,然后左移一位进位;

2)然后进行亦或操作,求出不需要进位的数据和;

3)循环,判断上面生成的两个数据与操作是否为0 如果为0就循环结束,如果不为0就继续执行上述的重复操作。

解决源码:

package leetcode;

import utils.InputUtil;
import utils.LogUtil;

public class Question371 {

    public static void main(String[] args) {
        int a = InputUtil.inputInt("请输入a:");
        int b = InputUtil.inputInt("请输入b:");

        while( (a&b) != 0){//判断当前a和b相加时是否需要进位:如果还要进位近进入循环否则退出循环.
            int temp1 = a&b; //与算法,求出要进位的位;
            temp1 = temp1<<1;//左移一位表示进位.
            int temp2 = a^b;//亦或求出不需要进位的数据和
            a = temp1;
            b = temp2;
        }
        int result = a|b;
        LogUtil.log_debug(""+result);
    }
}

从上面可以得出结论:
两个整数a和b取与(&)操作:
a&b 的结果是:对应的二进制数据中需要进位的位数;
a^b 的结果是a和b相加之后不需要进位的数据位的和。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值