当前位置:   article > 正文

leetcode解题报告(两数之和,递归乘法)_输入2个整数a和b,求这2个数的和 leetcode

输入2个整数a和b,求这2个数的和 leetcode

题目一:两整数之和

给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。 

 

 两整数之和

 首先,在不给用加法的情况,我们可以想到位运算,既然是两个数的运算,我们可以先假设a=3,

b=5,(所假设的数字补码同一位必须都是1的情况,不然考虑不全面)然后对这两数分别进行位运算,你会发现,异位是最接近的

两位为1变0,但没进位,接下来就要考虑进位,找到都为一的位数,那么就是按位与了,将按位与的往左挪一,再按位或,这就是此题解法

  1. int getSum(int a, int b){
  2. int c;
  3. while(b)
  4. {
  5. c=(unsigned int)(a&b)<<1;
  6. a^=b;
  7. b=c;
  8. }
  9. return a;
  10. }

 

 此题图解,必须定义c变量否则异或的不是上一轮b的值。

2.递归乘法

递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。

递归乘法

 既然能使用+-号,那么就不需要位运算了(位运算太难想了),我们就用乘法的本质,一个数×几就等于几个这样的数相加

  1. int multiply(int A, int B){
  2. if(B>0)
  3. return multiply(A,B-1)+A;
  4. return 0;
  5. }

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

闽ICP备14008679号