题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
注意点:
1)对特殊输入的处理,如果是一个数为0,0的负数次方不存在,同时考虑分为数的正数次方和数的负数次方的两种情况。
2)通过递归方式求整数的n次方的时间复杂度是O(logn)
3)使用为运算效率较高。例如数x/2可以使用x>>1代替,x%2可以使用x&1来代替。
代码实现:
class Solution{
public double Power(double base,int exponent){
if(base==0&&exponent<0)
throw new RuntimeException("输入不符合规范");
if(exponent==0)
return 0;
if(exponent>0){
return Power1(base,exponent);
}
else{
return Power1(1/base,-exponent);
}
}
public double Power1(double base,int exponent){
if(exponent==1)
return base;
if((exponent&1)==1){ //奇数的时候,要补乘一个base
return Power1(base,exponent>>1)*Power1(base,exponent>>1)*base;
}
else{ //如果是偶数
return Power1(base,exponent>>1)*Power1(base,exponent>>1);
}
}
}
class JianZhiOffer{
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.Power(2, -3));
System.out.println(s.Power(2, 3));
System.out.println(s.Power(2, 4));
}
}