[leetcode]--371. Sum of Two Integers

迈不过友情╰ 2022-07-11 14:11 224阅读 0赞

Question 371:

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

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

Example:

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

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

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

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

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

解决源码:

  1. package leetcode;
  2. import utils.InputUtil;
  3. import utils.LogUtil;
  4. public class Question371 {
  5. public static void main(String[] args) {
  6. int a = InputUtil.inputInt("请输入a:");
  7. int b = InputUtil.inputInt("请输入b:");
  8. while( (a&b) != 0){
  9. //判断当前a和b相加时是否需要进位:如果还要进位近进入循环否则退出循环.
  10. int temp1 = a&b; //与算法,求出要进位的位;
  11. temp1 = temp1<<1;//左移一位表示进位.
  12. int temp2 = a^b;//亦或求出不需要进位的数据和
  13. a = temp1;
  14. b = temp2;
  15. }
  16. int result = a|b;
  17. LogUtil.log_debug(""+result);
  18. }
  19. }

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

发表评论

表情:
评论列表 (有 0 条评论,224人围观)

还没有评论,来说两句吧...

相关阅读