DeTechn Blog

Python数值的整数次方

如果采用常规解法,需要注意的地方:当指数为负数的时候;当底数为零且指数为负数的情况;在判断底数base是不是等于0的时候,不能直接写base==0, 因为计算机内表示小数时有误差,只能判断他们的差的绝对值是不是在一个很小的范围内。如果采用递归解法,当n为偶数, an = an/2 an/2,当n为奇数, an = a(n-1)/2 a(n-1)/2 * a,利用右移一位代替除2运算,利用 &1 判断是否为奇数。同时需要注意递归终止条件,exponent = 1的话,return base,exponent = -1的话,return 1.0/base。再次提醒!必须写成 1.0/base,否则 1/base,返回一个integer 0!

'''
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
'''

'''
需要注意的地方:
当指数为负数的时候
当底数为零切指数为负数的情况
在判断底数base是不是等于0的时候,不能直接写base==0, 因为计算机内表示小数时有误差,只能判断他们的差的绝对值是不是在一个很小的范围内
'''

'''
当n为偶数, a^n = a^(n/2) * a^(n/2)
当n为奇数, a^n = a^((n-1)/2) * a^((n-1)/2)) * a
利用右移一位运算代替除以2
利用位与运算代替了求余运算法%来判断一个数是奇数还是偶数
优化代码速度
'''
class Solution:
    def Power(self, base, exponent):
        if exponent == 0:
            return 1
        if exponent == 1:
            return base
        if exponent == -1:
            return 1/base

        result = self.Power(base, exponent >> 1)
        result *= result
        if (exponent & 0x1) == 1:
            result *= base
        return result

S = Solution()
print(S.Power(5, -10))

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »