题目:
给你两个整数,被除数
dividend
和除数divisor
。将两数相除,要求 不使用 乘法、除法和取余运算。整数除法应该向零截断,也就是截去(
truncate
)其小数部分。例如,8.345
将被截断为8
,-2.7335
将被截断至-2
。返回被除数
dividend
除以除数divisor
得到的 商 。注意:假设我们的环境只能存储 32 位 有符号整数,其数值范围是
[−231, 231 − 1]
。本题中,如果商 严格大于231 − 1
,则返回231 − 1
;如果商 严格小于-231
,则返回-231
。来源:力扣(LeetCode)
链接:力扣
示例:
示例 1:
输入:dividend = 10, divisor = 3
输出:3
解释:10/3 = 3.33333.. ,向零截断后得到 3 。
示例 2:输入:dividend = 7, divisor = -3
输出:-2解释:7/-3 = -2.33333.. ,向零截断后得到 -2 。
解法:
用int函数优化除法。
知识点:
1.int(object, base):将一个指定进制的数字型字符串或者十进制数字转化为整形。object是一个数字或字符串参数,可省略;base是进制数,省略时默认为10。无论浮点数的小数部分值是什么,使用int函数转化时,只会保留整数部分。
代码:
class Solution: def divide(self, dividend: int, divisor: int) -> int: result = int(dividend / divisor) result = result if (t := pow(-2, 31)) <= result else t result = result if result <= (t := pow(2, 31) - 1) else t return result