leetcode29两数相除

leetcode29 Divide Two Integers

Posted by BY on August 24, 2019

前言

一个多月没有更新了。

正文

问题来源

本问题来自leetcode上的29题。

问题描述

给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。

示例 1:

输入: dividend = 10, divisor = 3
输出: 3

示例 2:

输入: dividend = 7, divisor = -3
输出: -2

分析:

func divide(dividend int, divisor int) int {
    if dividend == math.MinInt32 && divisor == -1 {
        return math.MaxInt32
    }
    if divisor == 1 {
        return dividend
    }
    //flag := int(dividend ^ int(divisor>0)
    flag := 0 
    if dividend < 0 {
        flag = 1
    }
    if divisor < 0 {
        flag ^= 1
    }
    dividend = int(math.Abs(float64(dividend)))
    divisor = int(math.Abs(float64(divisor)))
    i := 0
    for ; i < 31; i++ {
        if (divisor << uint(i)) > dividend {
            break
        } 
    }
    ans := 0 
    sum := 0
    for i = i-1; i >= 0; i-- {
        num := divisor << uint(i)
        if sum + num <= dividend {
            sum += num
            ans += (1 << uint(i))
        }
    }
    if flag != 0 {
        return -ans
    }
    return ans
}

总结:

勤思考。

结语

不管怎么样好好加油。