数值的整数次方

题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

思路:

主要是要考虑0,指数是负数,base是负数的一些情况。

public class Solution {
//1.需要考虑base为0时,exponent为负数时
//2.当base 为0时直接返回0,但是base 是double 不能直接用==
//3.考虑时间复杂度(logn) ,
//    当exponent为偶数时 a^n=a^(n/2)*a^(n/2)
//                 奇数时 a^n=a^(n-1)/2*a^(n-1)/2*a

private boolean isValidateInput=true;
public double Power(double base, int exponent) {
    if(equals(base,0.0) && exponent<0){
        isValidateInput=false;
        return 0;
    }
    if(equals(base,0.0) && exponent>=0){
        return 0;
    }
    boolean flagNegative=false;
    boolean flag=false;
    if(base<0){
        base=-base;
        if(exponent %2 ==1){
            flagNegative=true;
        }
    }
    if(exponent<0){
        flag=true;
        exponent=-exponent;
    }
    double sum=getPower(base,exponent);
    if(flagNegative){
        sum=-1*sum;
    }
    if(flag){
        sum=1.0/sum;
    }
    return sum;
}
public boolean equals(double x, double y){
    if((x-y)<0.000001 &&(y-x)<0.000001){
        return true;
    }
    return false;
}

public double getPower(double base,int exponent){
    if(exponent==0){
        return 1;
    }
    if(exponent==1){
        return base;
    }
    double result=getPower(base,exponent>>1);
    result*=result;
    if(exponent%2==1){
        result *=base;
    }
    return result;
}

}
posted @ 2018-07-19 09:21  罗贱人  阅读(142)  评论(0编辑  收藏  举报