剑指offer——12数值的整数N次方
题目描述
给定一个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