44.leetcode29_divide_two_integers

1.题目描述

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

If it is overflow, return MAX_INT.

不使用乘除法的情况下作除法,溢出的话返回MAX-INT。

2.题目分析

这个题的整体AC率说明除法其实也不是那么容易的。

3.解题思路

一开始是直接循环做减法,这么草率的做法不出所料的超时了。于是在里面嵌套了一个循环使除数成倍增加,来节省时间。

 1 class Solution(object):
 2     def divide(self, dividend, divisor):
 3         """
 4         :type dividend: int
 5         :type divisor: int
 6         :rtype: int
 7         """
 8         result=0
 9         o1=o2=1 #决定最后结果的正负号
10         n=1
11         MAX_INT=2147483647
12         MIN_INT=-2147483648
13         if dividend<0:  #假定两个数都是正的
14             dividend=-dividend
15             o1=-1
16         if divisor<0:
17             divisor=-divisor
18             o2=-1
19         #if divisor==0:  
20             #return MAX_INT
21         while dividend>=divisor: 
22             temp=divisor  #temp=divisor*2**(N-1)
23             while dividend-temp>=0: 
24                 dividend-=temp
25                 result+=n 
26                 temp+=temp #temp加倍
27                 n+=n #n加倍
28                 continue
29             n=1 #dividend未除尽,再次循环
30             continue
31         if o1==o2: #判断result符号
32             if result>MAX_INT: #判断是否溢出
33                 return MAX_INT
34             return result
35         else:
36             if result<MIN_INT:
37                 return MIN_INT
38             return -result

 

转载于:https://www.cnblogs.com/19991201xiao/p/8486295.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值