LeetCode50. Pow(x,n)

题目大意:实现一个计算机中求指数幂的操作。

题目分析:我觉得这道题是不需要考虑大数问题的,因为如果幂取到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

你可能感兴趣的:(数学,LeetCode,python,LeetCode)