我的一个简单问题是创建一个函数,确定某个给定的n是否可以将数字N写为a^n
,即我需要检查N^(1/n)
是否为整数。不知何故,这个函数会产生错误的结果:
def is_power(N, n):
r = float(N) ** ( 1. / float(n) )
return r.is_integer()
n=2
可行。
对于n=3
和N = 1,8,27,函数产生True,这是正确的。但从那时起,假,例如适用于4*4*4=64
或5*5*5=125
。如何创建一个找到正方形/立方体/等数字的工作函数?
答案 0 :(得分:6)
浮点算术不准确 - 请参阅Is floating point math broken?。
请使用精确整数数学检查您的答案。将r
舍入到最接近的整数,然后查看电源是否有效。这个Python 3代码删除了一些冗余类型转换。对于Python 2,将r
的计算包装成int()
类型转换(Python 3不需要)。
def is_power(N, n):
r = round(N ** (1.0 / n))
return r**n == N