leetcode:Divide Two Integers

来源:互联网 发布:mac安装阿里旺旺 编辑:程序博客网 时间:2024/06/05 10:49

Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

需要注意的是负的最大值为-2147483648,正的最大值为2147483647;因此需要将变量设置为long类型

最开始我的想法是既然不能除,那就每次都减去被除数呗;减一次记一次数但是最后提交的时候超时了;哎,没考虑极端情况,比如除数为1,被除数为2147483647这样的;

于是考虑是不是可以逐渐递增除数,比如除数为2,那么第一次减2,第二次减4,减8,减16.。。。不够减时,再将除数除2。。。直到最后除数为2

这样就大大减小了操作次数

程序如下

public class Solution {    public static int divide(int dividend, int divisor){long divid = dividend;long divs=divisor;int flag=1;double cnt = 0;if (divisor == 1)return dividend;if (divisor == -1){if (dividend == Integer.MIN_VALUE)return Integer.MAX_VALUE;elsereturn -dividend;}if (divid < 0){divid = -divid;flag=-flag;}if (divs < 0){divs = -divs;flag=-flag;}long ds = divs;double ct = 0.5;while (divid >= ds){divid = divid - ds;ct = ct * 2;cnt = cnt + ct;ds=ds*2;while (ds > divid && ds > divs){ds = ds / 2;ct = ct / 2;}if (ds == divs && ds > divid)break;}return (int) cnt * flag;    }}


0 0