劍指offer數值的整數次方
阿新 • • 發佈:2020-08-25
- 不得使用庫函式,不必考慮大數問題
* 雖然不必考慮大數問題,但是,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; }