Open zwwhdls opened 4 years ago
思路 用位运算。
数 a 向右移一位,相当于将 a 除以 2;数 a 向左移一位,相当于将 a 乘以 2
func divide(dividend int, divisor int) int { if dividend == 0 || divisor == 0 { return 0 } result := 0 // 处理符号问题 flag := 1 if dividend < 0 && divisor > 0{ dividend = -dividend flag = -1 } if dividend > 0 && divisor < 0 { divisor = -divisor flag = -1 } if dividend < 0 && divisor < 0 { divisor = -divisor dividend = -dividend } // 用 << 代替除法,简化模拟除法的过程 // 向左位移了几位,就包含(这个数的十进制)几个除数 for dividend >= divisor { tmp := divisor for i := 0; dividend >= tmp; i++ { dividend -= tmp result += 1 << uint(i) tmp = tmp << 1 } } // 处理取值边界问题 result = flag * result if result > math.MaxInt32 { return math.MaxInt32 }else if result< math.MinInt32{ return math.MinInt32 } return result } ```
思路 用位运算。
数 a 向右移一位,相当于将 a 除以 2;数 a 向左移一位,相当于将 a 乘以 2