题目描述: 输入一个double类型的数base和一个int类型的数exponent,求base的exponent次方
思路:
1,正负判断,base为0,exponent为负,则出错;base不为0,exponent有正负两种情况。
2,指数二进制表达,按位来做指数计算,例如13的二进制1101,10的13次方就可以表示为10^0001*10^0100*10^1000。
3,如果当前最右边位为1,那么就将结果乘上当前base
java程序:
public class Solution {
public double Power(double base, int exponent) {
int p ;
double res =1.0;
if(exponent>0){
p = exponent;
}else if(exponent< 0){
if(base==0)
throw new RuntimeException("分母不能为0");
p = -exponent;
}else{
return res;
}
while(p>0){
if((p&1) == 1) res *= base;//若当前最右边位数为1,则乘上base
base *= base; //base要翻倍,下一步p右移一位相当于除了2,若base不变,相当于整个值除了2,所以base要翻倍
p = p>>1; //p右移一位
}
return exponent>0? res:(1/res);
}
}