题目描述
Implement pow(x, n).
实现x的n次方计算
问题分析
- 暴力求解
- 考虑极端输入:
2.1 结果为double上下界如何处理
2.2 n<0如何处理 - 输出小数的保留问题
提交&结果
- Wrong Answer
Input:
34.00515
-3
解决:若n<0,n取绝对值,结果求倒数
- 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);
}
网友评论