【leetcode】Divide Two Integers

题意:不用乘除取余操作求除法

思路:

1、如果循环一个个把因子从被除数中减去,那么如果是INT_MAX或者INT_MIN除以1的情况,执行时间会很长

2、改善时间效率的方法采用将因子divisor不断乘以2(可以通过移位实现,同时结果ret也从1不断移位加倍),然后和被除数比较,等到大于等于被除数一半时,就从被除数中减去,将因子个数叠加入结果中,然后在剩下的被除数中采用同样的方法减去小于其一般的因子和,利用递归循环

代码:

package leetcode.doit;

   

public class DivideTwoIntegers_my {

   

/**

* @param args

*/

public static void main(String[] args) {

int ret = divide(2, 3);

System.out.println(ret);

int dividend = 20;

int divisor = 3;

int result = 1;

while (divisor < dividend) {

divisor <<= 1;

result <<= 1;

}

if (divisor != dividend) {

divisor >>= 1;

result >>= 1;

}

dividend -= divisor;

// System.out.println(divisor);

}

   

static int divide(int dividend, int divisor) {

int divisor_org=divisor;

if (dividend < divisor) {

dividend = 0; // Update dividend.

return 0;

}

   

int result = 1;

   

while (divisor < dividend) {

divisor <<= 1;

result <<= 1;

}

   

if (divisor != dividend) {

divisor >>= 1;

result >>= 1;

}

   

dividend -= divisor;

result =result + divide(dividend,divisor_org);

//System.out.println(result);

return result;

}

}

   

   

posted @ 2015-03-30 14:45  keedor  阅读(133)  评论(0编辑  收藏  举报