剑指Offer-数值的整数次方-Python

数值的整数次方

题目描述:

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

思路:

  1. 考虑边界值,底数若为0的时候,特殊处理。
  2. 用位运算代替乘除法,优化了效率

实现:

class Solution:
    def Power(self, base, exponent):
        # write code here
        boolInvalidInput = False
        if base == 0.0 and exponent < 0:
            boolInvalidInput = True
            return 0.0
        absExponent = abs(exponent)
        result = 0.0
        result = self.PowerWithUnsignedExponent(base, absExponent)
        if exponent < 0:
            return 1/result
        else:
            return result
     
     # 基础乘除   
    def PowerWithUnsignedExponent(self, base, absExponent):
        result = 1.0
        for i in range(absExponent):
            result *= base
        return result 

右移运算符代替了除以2,位于运算符代替了求余运算符(%)
实现:

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

猜你喜欢

转载自blog.csdn.net/weixin_40314385/article/details/88099795