leetcode解题报告(两数之和,递归乘法)

题目一:两整数之和

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

 

 两整数之和

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

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

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

int getSum(int a, int b){
int c;
while(b)
{
    c=(unsigned int)(a&b)<<1;
    a^=b;
    b=c;
}
return a;
}

 

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

2.递归乘法

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

递归乘法

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

int multiply(int A, int B){
if(B>0)
return multiply(A,B-1)+A;
return 0;
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>