[leetcode]--371. Sum of Two Integers

来源:互联网 发布:股市行情软件下载 编辑:程序博客网 时间:2024/05/16 00:47

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相加之后不需要进位的数据位的和。

0 0