牛客-剑指offerNo.13-java or python
No.12.数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。
求base的exponent次方。
i: double: base; int : exponent
o: base^exponent
思路
本题主要考察对情况考虑的全面性,求次方用迭代相乘的方法即可,但要考虑:
1.指数为负时,①不是迭乘了,而是迭乘后做分母,分子为1.。②底数不能为0,为零时可以抛异常等告知用户。
2.指数为0, 结果为1.
!!3.值得注意的是:次幂问题可以进行优化,即,次幂对半减化法。
eg:232=(216)2 偶数
231=(215)2*2 奇数
这样就可以使用递归啦 ,
小技巧:判断奇偶,用位与更简便
右移可以代替除以2
位与可以代替求余%
2°,直接使用数学函数,或者迭乘
code
// java1——递归
public class Solution {
public double Power(double base, int exponent) {
int flag=exponent&1;
if(exponent==0&&base!=0){
return 1;
}
if(exponent==1){
return base;
}
int n=exponent;
if(exponent<0){
n=-n;
if(base==0){
throw new IllegalArgumentException("Wrong");
}
}
double result=Power(base,n>>1);
result*=result
if(flag==1){
result*=base;
}
if(exponent<0){
return 1/result;
}
return result;
}
}
//java2——循环迭乘
public double Power(double base, int exponent) {
int result=1;
for(int i=0;i<Math.abs(exponent);i++){
result*=base;
}
if(exponent<0){
result=1/result;
}
return result;
}
#python
def Power(base,exponent):
return base**exponent