1. 程式人生 > 實用技巧 >劍指offer數值的整數次方

劍指offer數值的整數次方

  • 不得使用庫函式,不必考慮大數問題
    * 雖然不必考慮大數問題,但是,Integer.MIN_VALUE一但取反,就會溢位,所以需要考慮該特殊情況
  • 因為有時間的限制,所以n迴圈是不可行的,採用二分的方法進行優化,同時考慮到最小值取反會溢位,所以這裡採用將一開始的負數n進行/2的操作再進行取反,保證不會溢位,在進行與正數同樣的操作。
public double myPow(double x, int n) {
    if(n>0)return Pow(x,n);
   return 1/Pow(x,n);
}
private double Pow(double x,int n){
    if(n==0)return 1;
    if(n==1)return x;
    if(n<0){
        if(n!=0&&(int)(n&1)==0){
            double a = myPow(x,-(n/2));
            return a*a;
        }
        if(n!=0&&(int)(n&1)==1){
            double a = myPow(x,-((n+1)/2));
            return a*a*x;
        }
    }
    if(n!=0&&n%2==0){
        double a = myPow(x,n/2);
        return a*a;
    }
    if(n!=0&&n%2==1){
        double a = myPow(x,(n-1)/2);
        return a*a*x;
    }
    return 0;
}