【剑指Offer】10数值的整数次方
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
时间限制:1秒;空间限制:32768K
解题思路
思路一
本题的难点在于考虑问题要全面,要考虑到以及exponent为负数的情况。
Python代码:
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
# write code here
result = 1
if base==0 and exponent==0:
return 1
if exponent == 0:
return 1
elif exponent > 0:
for i in range(exponent):
result = result * base
else:
for i in range(-exponent):
result = result * 1/base
return result
思路二
使用快速幂算法。
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
# write code here
if base == 0:
return 0
if exponent == 0:
return 1
e = abs(exponent)
tmp = base
res = 1
while(e > 0):
#如果最后一位为1,那么给res乘上这一位的结果
if (e & 1 == 1): #n&1 等价于 (n%2)==1
res =res * tmp
e = e >> 1 #n>>=1 等价于 n/=2
tmp = tmp * tmp
return res if exponent > 0 else 1/res