实现函数double power(double base, int exponent),求base的exponent次方。
不得使用库函数,同时不需要考虑大数问题。
求数值的整数次方可以拆分成两种情况:
-
n为偶数:a = an//2*an//2
-
n为奇数:a = an//2*an//2*a
其次,要注意各种完整性,即n值为0、1、或负数的情况。使用递归求解过程中,要注意结束条件的合理性,即exponent==0
或exponent==1
。此外,这里用右移运算符代替了除以2,用与1相与来判断一个数是奇数还是偶数。
class Solution:
def power(self, base, exponent):
exponent_abs = exponent
if exponent < 0:
exponent_abs = -exponent
result = self.power_with_using_exponent(base, exponent_abs)
try:
if exponent < 0:
result = 1.0 / result
except ZeroDivisionError:
return False
return result
def power_with_using_exponent(self, base, exponent):
if exponent == 0:
return 1
if exponent == 1:
return base
result = self.power_with_using_exponent(base, exponent >> 1)
result *= result
print(result)
if (exponent & 0x1 == 1): # 指数是否为奇数,为奇数要多乘以一个基底
result *= base
return result
st = Solution()
base, exponent = 2, 8
print(st.power(base, exponent))
(最近更新:2019年09月21日)