当前位置:   article > 正文

一道有趣的题:计算两个整数的和(不能使用加减法)——半加法

calculate the sum of a and b

题目链接

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

Example 1:

Input: a = 1, b = 2 Output: 3

Example 2:

Input: a = -2, b = 3 Output: 1

思路: 采用半加法的思想, 即两个二进制数单独的位相加其结果可以用异或运算得到,进位可以用与运算得到。

例子2+3,相当于10+11

1.10^11=01,carry=(10&11)<<1=100

2.001^100=101,carry(001&100)<<1=0

3.因为carry已经为0,不产生进位,此时的异或运算即为加法的结果101

递归版本

`
class Solution {

  1. public int getSum(int a, int b) {
  2. if(b==0)return a;
  3. int carry=(a&b)<<1;
  4. int sum=a^b;
  5. return getSum(sum,carry);
  6. }

}

`

循环版本

`
class Solution {

  1. public int getSum(int a, int b) {
  2. while (b!=0){
  3. int carry=(a&b)<<1;
  4. a=a^b;
  5. b=carry;
  6. }
  7. return a;
  8. }

}

`

转载于:https://www.cnblogs.com/HunterJ/p/10615730.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/175635?site
推荐阅读
相关标签
  

闽ICP备14008679号