一、题目描述
实现 pow(x, n)
,即计算 x
的整数 n
次幂函数(即xn )。
示例 1
输入:x = 2.00000, n = 10
输出:1024.00000
示例 2
输入:x = 2.10000, n = 3
输出:9.26100
示例 3
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25
提示:
-100.0 < x < 100.0
-231 <= n <= 231-1
n 是一个整数
-104 <= xn <= 104
`
二、代码
代码如下:
class Solution:
def myPow(self, x: float, n: int) -> float:
if n >= 0:
power_2 = 1
result = 1
p = x
while power_2 <= n:
#print("power_2 & n:",power_2 & n)
#power_2 & n的意思是 power_2和n都转换为2进制后进行&运算(1&1=1 ,1&0=0,0&0=0)
if power_2 & n != 0:
#result=result*p
result *= p
#print("①",result)
#x^2 x^4 x^8 x^16
p = p * p
#print("②", p)
#power_2 = power_2*2 翻倍当前次数 ,相当于当前的p值平方之后的结果
power_2 = power_2 * 2
#print("③",power_2)
print("结果:",result)
return result
else:
n = -n
x = 1/x
power_2 = 1
result = 1
p = x
while power_2 <= n:
if power_2 & n != 0:
result *= p
p = p * p
power_2 = power_2 * 2
print(result)
print(result)
return result
三、解题思路
本题的解题思路是采用快速幂(二进制求幂)的方法去计算一个很大的幂。
二进制求幂的思想主要是将幂指数进行分割,例如:
213=2(1101) 其中1101为13的二进制表示。
2(1101)=21*8 x 21*4 x 20*2 x 21*1
如此计算的话,原本需要进行13次累乘运算的幂,现在只需要4次就能计算出来。