两数相除
1,程序简介
-
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
-
返回被除数 dividend 除以除数 divisor 得到的商。
-
整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
示例 1:
- 输入: dividend = 10, divisor = 3
- 输出: 3
- 解释: 10/3 = truncate(3.33333…) = truncate(3) = 3
示例 2:
- 输入: dividend = 7, divisor = -3
- 输出: -2
- 解释: 7/-3 = truncate(-2.33333…) = -2
提示:
- 被除数和除数均为 32 位有符号整数。
- 除数不为 0。
- 假 设 我 们 的 环 境 只 能 存 储 32 位 有 符 号 整 数 , 其 数 值 范 围 是 [ − 2 31 , 2 31 − 1 ] 。 本 题 中 , 如 果 除 法 结 果 溢 出 , 则 返 回 2 31 − 1 。 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^{31}, 2^{31} − 1]。本题中,如果除法结果溢出,则返回 2^{31} − 1。 假设我们的环境只能存储32位有符号整数,其数值范围是[−231,231−1]。本题中,如果除法结果溢出,则返回231−1。
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Fri Jan 7 18:58:35 2022
Function: 两数相除
@author: 小梁aixj
"""
import math
class Solution(object):
def divide(self, dividend, divisor):
if divisor == 0:ArithmeticError
if dividend == 0:
return 0
isPositive = (dividend < 0) == (divisor < 0)
m = abs(dividend)
n = abs(divisor)
res = math.log(m) - math.log(n)
res = int(math.exp(res))
if isPositive:
return min(res, 2147483647)
return max(0 - res, -2147483648)
if __name__ == '__main__':
s = Solution()
print(s.divide(10, 3))