代码改变世界

leetcode - Divide Two Integers

2013-03-28 22:59  张汉生  阅读(173)  评论(0编辑  收藏  举报

题目描述:点击此处

 1 #include <limits.h>
 2 class Solution {
 3 public:
 4   unsigned int maxInt = (unsigned int) INT_MAX;
 5   unsigned int getAbsoluteValue(int n){
 6     if (n>=0 || n==INT_MIN)
 7       return (unsigned int) n;
 8     return maxInt + maxInt + 1 - (unsigned int)n +1;
 9   }
10   unsigned int divideUnsigned(unsigned int dividend, unsigned int divisor){
11     unsigned int rlt = 0;
12     unsigned int remain = dividend;
13     unsigned int trlt;
14     unsigned int tdiv;
15     while (remain>=divisor){
16       tdiv = divisor;
17       trlt = 1;
18       while (tdiv<=remain){
19         remain -= tdiv;
20         rlt += trlt;
21         if(tdiv > remain)
22             break;
23         trlt += trlt;
24         tdiv += tdiv;
25       }
26     }
27     return rlt;
28   }
29   int divide(int dividend, int divisor) {
30     // Start typing your C/C++ solution below
31     // DO NOT write int main() function
32     unsigned int urlt = divideUnsigned(getAbsoluteValue(dividend), getAbsoluteValue(divisor));
33     bool flag = true;
34     if (dividend<0)
35       flag = !flag;
36     if (divisor<0)
37       flag = !flag;
38     if (flag)
39       return (int) urlt;
40     if (urlt==0 || urlt ==maxInt+1)
41       return (int) urlt;
42     return (int)( maxInt+ maxInt + 1 - urlt +1); 
43   }
44 };