标签:style class blog code http color
Divide two integers without using multiplication, division and mod operator.
Analysis: 我自己用binary search做老是出TLE的错误,看了网上思路,有了如下方法:long did = dividend, long div = divisor; 我们发现did可以表示为 did = div * 2^k + div * 2 ^m + ....+ C, 那么商可以表示为 2^k + 2^m + ....
参考了http://jqmichelle.blogspot.com/2013/05/leetcode-divide-two-integers-divide-two.html 的思路
1 public class Solution { 2 public int divide(int dividend, int divisor) { 3 long did = dividend; 4 long div = divisor; 5 if (div == 0) 6 throw new ArithmeticException(); 7 int result = 0; 8 int sign = 1; 9 if (did == 0) return 0; 10 if (did < 0) sign *= -1; 11 if (div < 0) sign *= -1; 12 did = did > 0? did : (-1) * did; 13 div = div > 0? div : (-1) * div; 14 if (did == div) return sign; 15 int k = 0; 16 while (div << k <= did) { 17 ++k; 18 } 19 for (int i = k; i >=0; i--) { 20 if (div << i <= did) { 21 result |= 1 << i; 22 did -= div << i; 23 } 24 } 25 return result * sign; 26 } 27 }
Leetcode: Divide Two Integers,布布扣,bubuko.com
标签:style class blog code http color
原文地址:http://www.cnblogs.com/EdwardLiu/p/3800518.html