zoukankan      html  css  js  c++  java
  • 每日一题力扣29

    给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

    返回被除数 dividend 除以除数 divisor 得到的商。

    整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/divide-two-integers
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    错解:超时了。。。

    class Solution:
        def divide(self, dividend: int, divisor: int) -> int:
            cnt=0
            n=1
            if dividend >0 and divisor>0:
                n=1
            elif dividend >0 and divisor<0:
                n=-1
            elif dividend <0 and divisor<0:
                n=1
            elif dividend <0 and divisor>0:
                n=-1
            if -2147483648 < n < 2147483647:
            while abs(dividend)>=abs(divisor):
                dividend=abs(dividend)-abs(divisor)
                cnt+=1
            
            return cnt*n

    正解

    位运算不是很明白

    class Solution:
        def divide(self, dividend: int, divisor: int) -> int:
            sign = (dividend > 0)^(divisor>0)#如果两个条件不同时满足,那就是1,即true
            dividend,divisor = abs(dividend),abs(divisor)
            n = 0 
            while divisor <=  dividend:
                divisor = divisor << 1
                n+=1
            res = 0
            while n>0:
                divisor = divisor>>1
                n-=1
                if dividend>=divisor:
                    res += 1<<n
                    dividend -= divisor
            if sign:
                res = -res
            m = 1<<31
            if res > m -1:
                return m -1
            elif res <-m:
                return -m
            else:
                return res
  • 相关阅读:
    数组的顺序存储表示
    CF538G Berserk Robot
    【LGR-077】洛谷 10 月月赛 I Div.1 && P6854 Tram
    [THUPC2019]找树
    CF536D Tavas in Kansas
    luogu「EZEC-4.5」子序列
    2020.8.7
    拉格朗日反演
    2020.8.6
    初赛复习
  • 原文地址:https://www.cnblogs.com/liuxiangyan/p/14524910.html
Copyright © 2011-2022 走看看