实现函数 double Power(double base, int exponent),求base的exponent次方。
注意:
1.保证base和exponent不同时为0。
2.不得使用库函数,同时不需要考虑大数问题
3.有特殊判题,不用考虑小数点后面0的位数。
数据范围:
,
,保证最终结果一定满足 
进阶:空间复杂度
,时间复杂度 %5C)
进阶:空间复杂度
2.00000,3
8.00000
2.10000,3
9.26100
2.00000,-2
0.25000
2的-2次方等于1/4=0.25
# -*- coding:utf-8 -*- class Solution: def Power(self, base, exponent): # write code here self.result = 1 if exponent>0: for i in range(exponent): self.result = self.result * base return self.result if exponent < 0: for i in range(-exponent): self.result = self.result * base return 1/self.result if exponent ==0 : return 1
# -*- coding:utf-8 -*- class Solution: def Power(self, base, exponent): # write code here def quick_mul(x, n): # 快速幂法 if not n: return 1.0 y = quick_mul(x, n//2) # 递归 if n%2 ==0: return y * y else: return y * y * x if exponent<0: base = 1 / base exponent = -exponent return quick_mul(base, exponent)
>> 1实现除2 &1可判断奇偶 class Solution:
def Power(self,base,exponent):
if base == 0:
return 0
else:
res = [1,base]
for i in range(2,abs(exponent)+1):
res.append(res[int(i>>2)] * res[int((i + 1) >> 2)])
if exponent >= 0 :
return res[abs(exponent)]
else:
return 1/res[abs(exponent)]
s = Solution()
ans = s.power(3,-3)
print(ans)
```
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
请在这里输入引用内容
保证base和exponent不同时为0
这道编程题考验求解数值的幂的过程,这里的幂要注意几种情况:
在求解幂为负整数的时候,注意在最后返回结果时,对其取倒数。
最直接的求解方法是:直接循环求数值积,但这种方式的时间复杂度是o(n),有兴趣的朋友再优化优化吧。
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
# write code here
# 求数值幂,要注意整数包含正整数和负整数
# 如果幂是负整数,对结果取倒即可
# ------------------------
# method 1:使用内置方法
if (base==0.0 and exponent!=0) or (base!=0.0 and exponent==0) or (base!=0.0 and exponent!=0):
return base ** exponent
# -------------------------
# method 2:暴力循环法 时间复杂度 o(n)
res=1
for i in range(abs(exponent)):
res*=base
if exponent<0: # 考虑负整数的情况
res=1/res
return res
# --------------------------
# method 3:
mark = 0 class Solution: def Power(self, base, exponent): global mark if base == 0:#排除0 return 0 if exponent == 0: return 1 if exponent < 0: #把复指数数变成正数 exponent = -exponent mark = 1 if exponent == 1: return base if exponent%2 == 0: if mark == 1: return (1/self.Power(base, exponent/2))**2 else: return self.Power(base, exponent/2)**2 else: if mark == 1: return (1/base)*(1/self.Power(base, exponent/2))**2 else: return base*self.Power(base, exponent/2)**2
class Solution {
public:
double Power(double base, int exponent) {
int e = exponent;
if (e < 0) {
e = -e;
base = 1 / base;
}
if (e == 1) {
return base;
} else if (e == 0) {
return 1;
}
if (e & 1) {
return base * Power(base * base, e >> 1);
} else {
return Power(base * base, e >> 1);
}
}
}; # -*- coding:utf-8 -*- class Solution: def Power(self, base, exponent): if exponent < 0: base = 1.0 / base exponent = - exponent e = exponent if e == 1: return base elif e == 0: return 1 if e & 1: return base * self.Power(base * base, e >> 1) else: return self.Power(base * base, e >> 1)
# -*- coding:utf-8 -*- # 解题思路:考察代码的完整性,注意exponent为负的情况 # 有一个技巧:base的exponent次方: # 当exponent为偶数时,pow(b, e) = pow(b, e/2) * pow(b, e/2) # 当exponent为奇数时,pow(b, e) = pow(b, e/2) * pow(b, e/2) * b # 当exponent为正数时,直接按上述表达式求值 # 当exponent为负数时,先求e的绝对值,然后用1除以pow(b,e) # 当exponent为0时,直接返回1 class Solution: def Power(self, base, exponent): return pow(base, exponent) def pow(self, base, exponent): if exponent == 0: return 1 if exponent == 1: return base ex = abs(exponent) result = pow(base, ex / 2) * pow(base, ex / 2) if ex % 2 == 1: result *= base if exponent < 0: return 1/result return result
class Solution: def Power(self, base, exponent): # write code here total = 1 if exponent == 0: return total elif exponent > 0: for i in range(1,exponent+1): total *= base return total else: t = -exponent for i in range(1,t+1): total *= base return 1/total
# -*- coding:utf-8 -*- class Solution: def Power(self, base, exponent): # write code here if base == 0 and exponent == 0 : return none return base**exponent
/** * 1.全面考察指数的正负、底数是否为零等情况。 * 2.写出指数的二进制表达,例如13表达为二进制1101。 * 3.举例:10^1101 = 10^0001*10^0100*10^1000。 * 4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。 */ public double Power(double base, int n) { double res = 1,curr = base; int exponent; if(n>0){ exponent = n; }else if(n<0){ if(base==0) throw new RuntimeException("分母不能为0"); exponent = -n; }else{// n==0 return 1;// 0的0次方 } while(exponent!=0){ if((exponent&1)==1) res*=curr; curr*=curr;// 翻倍 exponent>>=1;// 右移一位 } return n>=0?res:(1/res); }