码迷,mamicode.com
首页 > 其他好文 > 详细

Divide Two Integers

时间:2015-07-18 18:31:53      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

https://leetcode.com/problems/divide-two-integers/

需要注意的,int类型的数据,正数最大和负数最小可以表示到:

2147483647
-2147483648

正数最大的二进制码为:011111111......1111,负数最小的二进制码为:10000000000....00
均为32位的二进制表示。
并且正数+1后得到的数是负数最小的数,因为发生了溢出,这一定要注意。
同时负数最小数-2147483648取反,同样得到的二进制码相同,所以还是它本身。
这几个点一定注意。

同时还要注意,abs()取绝对值函数,为了防止发生溢出,一定要定义了新的long long之后再进行使用。
 1 class Solution {
 2 public:
 3     int getRes(long long div,long long sor)
 4     {
 5         if(div==0)
 6             return 0;
 7         if(div<sor)
 8             return 0;
 9         int res=0;
10         long long times=1;
11         long long remain=div;
12         long long var=sor;
13         while(remain-var>=0)
14         {
15             remain-=var;
16             res=res+times;
17             var*=2;
18             times*=2;
19         }
20         if(remain>0)
21             res+=getRes(remain,sor);
22         return res;
23     }
24     int divide(int dividend, int divisor) {
25         int MAX_INT=2147483647;
26         long long a=dividend;
27         long long b=divisor;
28         long long div=abs(a);  //先用两个long long类型的数据来存放dividend和divisor,否则会造成abs(-2147483648)溢出
29         long long sor=abs(b);
30         
31         int res=getRes(div,sor);
32 
33         
34         if((dividend>0&&divisor>0)||(dividend<0&&divisor<0))
35         {
36             if(res<0)
37                 return MAX_INT;
38             else
39                 return res;
40         }    
41         else
42         {
43             return 0-res;
44         }
45             
46     }
47 };

 

Divide Two Integers

标签:

原文地址:http://www.cnblogs.com/aguai1992/p/4657289.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!