题目大意:实现一个计算机中求指数幂的操作。
题目分析:我觉得这道题是不需要考虑大数问题的,因为如果幂取到2^30的级别,底数取2的话,这个结果是无法用float或double表示的。本题在计算过程中需要优化,常规的解法会出现内存不够的情况。我们知道,求a的n次方,可以用以下公式来表示:
当n为偶数时,就是第一种情况;当n为奇数时,是第二种情况。同时,可以用n>>1位操作代替除以2,效率更高。判断是否是奇数,等价于判断n&0x1是否为1。
代码展示:
class Solution(object):
def myPow(self, x, n):
absn = n
if n<0:
absn = -n;
result = self.power(x,absn)
if n<0:
result = 1.0/result
return result
def power(self,x,absn):
if absn==0:
return 1
elif absn==1:
return x
result = self.power(x,absn>>1)
result *= result
if(absn&0x1):
result *= x
return result