剑指 Offer II 001. 整数除法

要求不得使用乘号 '*'、除号 '/' 以及求余符号 '%'
剩下的就还剩下减法、位运算
减法的话会有效率问题,涉及到超大数。。会越界
所以最好的方法就是位运算


func divide(_ a: Int, _ b: Int) -> Int {
        if ( a == Int32.min && b == -1) || ( a == Int32.max && b == 1) {
            
            return Int( Int32.max )
        }
        if a == Int32.min && b == 1 {
            return Int( Int32.min )
        }
        if a == Int32.min && b == Int32.min {
            return 1
        }
        if b == Int32.min {
            return 0
        }
        let flag = a ^ b >= 0 ? 1 : -1
        var tempA = abs(a)
        let tempB = abs(b)
        var res = 0
        //被除数比除数小,后边不用再算了
        if tempA < tempB {
            return flag == 1 ? res : -res
        }
        

        for i in (0...31).reversed() {
            
            if ( tempA >> i ) - tempB >= 0 {
             
                tempA -= ( tempB << i )
                res += ( 1 << i )

            }
            
        }
      
        
        
        return flag == 1 ? res : -res
        
    }


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容