不使用任何算数运算符实现加法
这里的算数运算符表示的是
这里呢!我们第一步传入 如果 B 是0我们就直接返回A,同样也是在没有进位的时候返回A!下面的 0 == carry表示我们第一次进入就没有进位可以避免二次递归。这样我们就算完了。小猿写的欢迎斧正!
算术运算符 含义(示例)
+(加号) 加法运算 (3+3)
–(减号) 减法运算 (3–1) 负 (–1)
*(星号) 乘法运算 (3*3)
/(正斜线) 除法运算 (3/3)
%(百分号) 求余运算10%3=1 (10/3=3·······1)
^(乘方)
乘幂运算 (3^2)
! (阶乘) 连续乘法 (3!=3*2*1=6)
|X| x为任何数 (
绝对值) 求正 (|1|)
我们不使用算数运算符的情况下实现加法,还是有其他的一些算法的,比如位运算,那我们就看一下位运算的算法,我们收先考虑或可以吗?
我们知道或就是不一样的就是1,那么有一个问题了对于位运算而言我们只有零和一,对于没有进位的情况我们的或完美的算出了结果,但是对于有进位的情况怎么办呢?有同学要说了,我们有与呀!这里可以通过与获得那些有进位的数字位,但是,我们那些进位之后的原位数是零还是一就不确定了。因为我们不知道前面的以为是否有进位,所以我们需要做一个而且我们必须将原来有进位的首先置零才行。所以我们使用这里的异或,这样就只留下了不进位的数字位,然后我们通过与算出有进位的数字位,然后进位的数字向左移动一位,接下来,从新计算就好了!
public int addAB(int A, int B) {
if (0 == B) {
return A;
}
int sum = A ^ B;
int carry = (A & B) << 1;
if (0 == carry) {
return sum;
}
return addAB(sum, carry);
}
这里呢!我们第一步传入 如果 B 是0我们就直接返回A,同样也是在没有进位的时候返回A!下面的 0 == carry表示我们第一次进入就没有进位可以避免二次递归。这样我们就算完了。小猿写的欢迎斧正!