不使用乘法、除法、求余数,计算两个数字相除。
使用加法和减法运算。
Java实现代码如下:
1 class Solution { 2 public int divide(int dividend, int divisor) { 3 if (dividend == Integer.MIN_VALUE && divisor == -1) { 4 return Integer.MAX_VALUE; 5 } 6 long a = Math.abs((long)dividend); 7 long b = Math.abs((long)divisor); 8 int num = 0; 9 long sum; 10 while (b <= a) { 11 sum = b; 12 int count = 1; 13 while (sum + sum <= a) { 14 count += count; 15 sum += sum; 16 } 17 a = a - sum; 18 num = num + count; 19 } 20 if ((dividend < 0 && divisor > 0) || dividend > 0 && divisor < 0) { 21 num = -num; 22 } 23 return num; 24 } 25 }
上述代码用实际的例子进行解释,假设a=10,b=3,主要介绍10~19行的循环体的逻辑。
外部循环1:判断 3 <= 10满足
内部循环1.1:3 + 3 <= 10满足,count = 2,sum = 6
内部循环1.2:6 + 6 <= 10不满足,跳出内部循环,a = 10 - (3 + 3) = 4,num = 0 + 2 = 2
外部循环2:判断3 <= 4满足,
内部循环2.1:3 + 3 <= 4不满足,跳出内部循环,a = 4 - 3 = 1,num = 2 + 1 = 3。
最终num=3,即为所求。可分析,这里是计算在b的倍数,不超过a的情况下,最多是b的几倍。
用连续的加法来计算乘法,用减法来计算求余。