[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相加之后不需要进位的数据位的和。
还没有评论,来说两句吧...