码迷,mamicode.com
首页 > 其他好文 > 详细

【leetcode】Divide Two Integers

时间:2015-03-30 16:11:29      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

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

思路:

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;

}

}

? ?

? ?

【leetcode】Divide Two Integers

标签:

原文地址:http://www.cnblogs.com/keedor/p/4378038.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!