我正在尝试使用 python 求以 3 为底的数字的对数。
问题是这样的:
https://leetcode.com/problems/power-of- Three/description/
我正在使用这段代码:
import math
math.log(k,3)
但是,对于某些测试用例(还有更多测试用例)来说它失败了:
math.log(243,3)
#output
4.999999999999999
math.log(59049,3)
#output
9.999999999999998
我不想使用它,round()
因为它会对其他不是 3 的幂的数字进行四舍五入。
这是我正在使用的完整代码:
class Solution:
def isPowerOfThree(self, n: int) -> bool:
import math
k = abs(n)
if n<=0:
return False
return math.log(k,3) == int(math.log(k,3))
注意:我正在寻找涉及对数的解决方案。请随时询问任何澄清。
这只是典型的浮点错误。回想一下,当您编写 时
math.log(x, 3)
,Python 实际上正在计算类似 的内容math.log(x) / math.log(3)
,其中(自然)对数计算和除法都必须四舍五入到最接近的float
。但是,如果您使用
int
而不是进行数学计算float
,则可以保持准确性。这会检查您是否可以除以
n
3(没有余数),直到结果为 1。