題目描述
Implement pow(x, n).
實(shí)現(xiàn)x的n次方計(jì)算
問題分析
- 暴力求解
- 考慮極端輸入:
2.1 結(jié)果為double上下界如何處理
2.2 n<0如何處理 - 輸出小數(shù)的保留問題
提交&結(jié)果
- Wrong Answer
Input:
34.00515
-3
解決:若n<0,n取絕對值,結(jié)果求倒數(shù)
- Time Limit Exceeded
Last executed input:
0.00001
2147483647
解決:參考討論砌滞,利用二分法
public double myPow(double x, int n) {
if(n == 0)
return 1;
if(n<0){
n = -n;
x = 1/x;
}
if(n%2==0){
return myPow(x*x,n/2);
}else {
return x*myPow(x*x,(n-1)/2);
}
}
- Wrong Answer
Input:
2.00000
-2147483648
Output: ∞
Expected: 0.00000
解決:修改n<0的情況:
if(n<0){
if(n == Integer.MIN_VALUE)
return 1.0/ (myPow(x, Integer.MAX_VALUE) * x);
else
return 1.0/myPow(x, -n);
}