给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
考虑指数的正负,底数是否为0等情况。0的0次方在数学上是没有意义的,因此无论输出0还是1都是可以接受的。
当指数为负数时,我们可以先对指数求绝对值,然后算出次方的结果之后再取倒数。特殊情况:底数为0,指数为负,0不能作为除数。
假设我们的目标是求出一个数字的32次方,如果我们已经知道了它的16次方,那么只要在16次方的基础上再平方一次就可以了。而16次方是8次方的平方,以此类推。
Tip:用右移运算符代替除以2,用位与运算符代替求余运算符,位运算的效率比乘除法及求余运算的效率要高很多。
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
# write code here
flag = False
if base == 0 and exponent < 0:
flag = True
return 0
n = abs(exponent)
if n == 0:
return 1
elif n == 1:
return base
else:
result = self.Power(base, n >> 1)
result *= result
# 若为奇数
if n & 1 == 1:
result *= base
if exponent < 0:
return 1 / result
else:
return result