题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路:把指数转化为二进制,比如8^11=8^8*8^1*8^0;(11=1011)
从右往左算!!先算低位,然后把一直累乘到res上!
考虑几种情况:
- base=0,e<1;非法输入;
- base!=0,e>0;
- base!=0,e<0;
- base!=0,e=0;
public class Solution {
//考察快速幂
public double Power(double base, int exponent) {
double res=1;
double cur=base;
int e;
if(exponent>0){
e=exponent;
}else if(exponent<0){
if(base==0){
throw new RuntimeException("输入无效,分母不能为0");
}
e=-exponent;
}else{
return 1;
}
while(e!=0){
if((e&1)==1){
res*=cur;
}
cur*=cur;
e>>=1;
}
return exponent>0?res:(1/res);
}
}