zoukankan      html  css  js  c++  java
  • leetcode -- Divide Two Integers

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

    1.naive的做法是用除数一个一个减被除数,直到被除数<=0, 此方法会超时!!!

    2.将被除数向左移位(x2),然后与被除数做比较,直到发现仅次于被除数的那个值,减去该值后继续(line:24-30)。

     1 public class Solution {
     2     public static int divide(int dividend, int divisor) {
     3         if (dividend == 0 || divisor == 1)
     4             return dividend;
     5             
     6         int sign = 1;
     7         if (dividend < 0)
     8             sign = sign * -1;
     9         if (divisor < 0)
    10             sign = sign * -1;
    11 
    12         long divid = Math.abs((long)dividend);
    13         long divis = Math.abs((long)divisor);
    14 
    15         long[] a = new long[32];
    16         int i = 0;
    17         while (divis > 0 && divis <= divid) {
    18             a[i] = divis;
    19             divis = divis << 1;
    20             i++;
    21         }
    22         i--;
    23         long res = 0;
    24         while ( divid > 0 && i >= 0) {
    25             if(divid >= a[i]){
    26                 divid = divid - a[i];
    27                 res = res + (1 << i);
    28             }
    29             i--;
    30         }
    31         return (int)(res * sign) ;
    32     }
    33 }

    使用int时会出现整数溢出问题,INT_MIN(-2147483648),比如 abs(-2147483648) = -2147483648,这里在12、13行全部使用long

    另外+的优先级要比<<高

    ref:http://fisherlei.blogspot.com/2012/12/leetcode-divide-two-integers.html

  • 相关阅读:
    java 第二次作业
    Java上机作业5.7
    Java上机作业4.30
    Java第八周作业
    上机作业4.23
    第七周作业
    4.16上机作业
    第六周作业
    Java上机作业4.9
    Java4.2上机作业
  • 原文地址:https://www.cnblogs.com/feiling/p/3226546.html
Copyright © 2011-2022 走看看