题目描述
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
示例1
输入: 2.00000, 10
输出: 1024.00000
示例2
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
解题思路:
如果
n
n
n为偶数,那可以写成
(
x
2
)
n
/
/
2
(x^2)^{n//2}
(x2)n//2
如果
n
n
n为奇数,则为
x
(
x
2
)
n
/
/
2
x(x^2)^{n//2}
x(x2)n//2,即多出一项,所以如果
n
n
n为奇数,需要把多出的一项先乘起来。
比如
(
x
2
)
5
=
(
x
2
)
2
∗
x
2
(x^2)^5 = (x^2)^2 * x^2
(x2)5=(x2)2∗x2,这个时候是多出一项
x
2
x^2
x2
最后将乘出来的项的结果与
(
(
x
2
)
2
)
2
.
.
.
((x^2)^2)^2...
((x2)2)2...相乘,这里
x
x
x平方的次数为
l
o
g
2
n
log_2 n
log2n。
代码
class Solution(object):
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""
# return x**n
if n == 0:
return 1
if n < 0: x, n = 1/x, -1 * n
res = 1
while n > 0:
if n % 2 == 1:
res *= x
x *= x
n = n // 2
return res