导航
导航
文章目录
  1. 题目
  2. 翻译
    1. 方法一
    2. 方法二

LeetCode-371.Sum of Two Integers

题目

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.

翻译

计算两个整数a和b的和,但不能使用+和-
例如:
给出a=1,b=2,返回3。

方法一

分两步计算,先利用异或,计算出没有进位的数,然后利用与运算并左移一位,算出进位,循环求和:

1
2
3
4
5
6
7
8
9
10
public class Solution {
public int getSum(int a, int b) {
while (b != 0) {
int carrier = (a & b) << 1;
a = a ^ b;
b = carrier;
}
return a;
}
}

方法二

模拟加法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Solution {
public int getSum(int a, int b) {
int r = 0, c = 0, p = 1;
while ((a | b | c) != 0) {
if (((a ^ b ^ c) & 1) != 0)
r |= p;
p <<= 1;
c = (a & b | b & c | a & c) & 1;
a >>>= 1;
b >>>= 1;
}
return r;
}
}

参考:
http://www.tuicool.com/articles/amIzymq