前言
一个多月没有更新了。
正文
问题来源
本问题来自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
}
总结:
勤思考。
结语
不管怎么样好好加油。