【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;
}
}