zoukankan      html  css  js  c++  java
  • 【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;

    }

    }

       

       

  • 相关阅读:
    Connected Graph
    Gerald and Giant Chess
    [NOI2009]诗人小G
    四边形不等式小结
    [NOI2007]货币兑换
    Cats Transport
    Cut the Sequence
    Fence
    The Battle of Chibi
    [Usaco2005 Dec]Cleaning Shifts
  • 原文地址:https://www.cnblogs.com/keedor/p/4378038.html
Copyright © 2011-2022 走看看