Difficulty: **给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 ‘*’、除号 ‘/’ 以及求余符号 ‘%’ 。 注意: 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231−1]。本题中,如果除法结果溢出,则返回 231 − 1 示例 1: 输入:a = 15, b = 2 输出:7 解释:15/2 = truncate(7.5) = 7 示例 2: 输入:a = 7, b = -3 输出:-2 解释:7/-3 = truncate(-2.33333…) = -2 示例 3: 输入:a = 0, b = 1 输出:0 示例 4: 输入:a = 1, b = 1 输出:1 提示: -231 <= a, b <= 231 - 1 b != 0 注意:本题与主站 29 题相同:https://leetcode-cn.com/problems/divide-two-integers/ **

aba/b'*''/''%'

注意:

truncatetruncate(8.345) = 8truncate(-2.7335) = -2[−231, 231−1]231 − 1

示例 1:

输入:a = 15, b = 2
输出:7
解释:15/2 = truncate(7.5) = 7

示例 2:

输入:a = 7, b = -3
输出:-2
解释:7/-3 = truncate(-2.33333..) = -2

示例 3:

输入:a = 0, b = 1
输出:0

示例 4:

输入:a = 1, b = 1
输出:1

提示:

-231 <= a, b <= 231 - 1b != 0

注意:本题与主站 29 题相同:

Solution

Language: ****

func divide(a int, b int) int {
    if a== math.MinInt32 && b == -1 {
        return math.MaxInt32
    }
    var sign = 1
    if  a>0 && b<0 ||    a<0 && b>0 {
        sign = -1
    }
    if a<0 {
        a = -a 
    }
    if b<0 {
        b = -b
    }
    var res int64
    for {
        if  a < b { break }
        // a< b ,res = 0
        var cur = 1
        var temp = b 
        for temp + temp <= a {
            temp +=  temp 
            cur += cur 
        }
        res += int64(cur )
        a -= temp 
    }
    return int(res*int64(sign))


}
​