题目来源:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
示例 1:
输入: 2.00000, 10
输出: 1024.00000说明:
- -100.0 < x < 100.0
- n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。
这题有个测试用例是x=0.00001,n=2147483647。如果直接按常规方法,丢一个循环去做,会内存溢出。。
所以得用非常规方法,减小运算量。
我们都知道,十进制数可以表示为二进制数,即有:
所以可以设置一个循环,设置两个量来分别存储和
。
class Solution(object):
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""
ans = 1
if n < 0:
x, n = 1/x, -n
while n:
if n & 1: # 判断最低位是否为1
ans *= x # 对应位*对应x
x *= x
n >>= 1 # 去除n最后一位
return ans
参考: