不使用乘法、除法、求余数,计算两个数字相除。

使用加法和减法运算。

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的几倍。

用连续的加法来计算乘法,用减法来计算求余。

posted on 2018-10-21 21:03  Sempron2800+  阅读(130)  评论(0编辑  收藏  举报