题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0
思路:
简单版(暴力法):给定一个指数,循环和底数相乘得出结果。在该方法中,有个问题需要考虑,就是判断指数为正负的问题,当指数为负时,需要将求得的数除1即可。
class Solution:
def Power(self, base, exponent):
# write code here
if base == 0:
return 0
if exponent==0:
return 1
result = 1
for i in range(abs(exponent)):
result*=base
if exponent<0:
return 1/result
else:
return result
改进版:可想而知,循环相乘做了很多无用功,比如在一个循环中需要做32次循环,我们的目标是求出该数的32次方,我们只需要求出该数的16次方再平方即可。相应的16次方可以有八次方平方得来。这样就省去了很大一部分计算。

class Solution:
def Power(self, base, exponent):
# write code here
if base - 0 > -0.0000001 and base - 0 < 0.0000001 and exponent < 0:
return 0
if exponent >= 0:
return self.powWithUnsignExponent(base, exponent)
else:
return 1 / self.powWithUnsignExponent(base, - exponent)
def powWithUnsignExponent(self, base, absExpoent):
if absExpoent == 0:
return 1
elif absExpoent == 1:
return base
result = self.powWithUnsignExponent(base, absExpoent >> 1)
result *= result
if absExpoent & 0x1 == 1:
result *= base
return result