我做了这样的代码:
public static double myPow(double x, int n){
if(n==0) return 1;
double t = myPow(x, n/2);
if(n % 2 != 0){
if(n < 0){
return (1 / t * t * x);
} else {
return t * t * x;
}
} else {
return t * t;
}
}
为什么这个java代码不能工作。我将工作的 cpp 代码翻译为 java 版本。但它失败了:
输入:34.00515,-3 输出:1.00000 预期:0.00003
附注 这是工作的 cpp 版本:
class Solution {
public:
double power(double x, int n)
{
if (n == 0)
return 1;
double v = power(x, n / 2);
if (n % 2 == 0)
return v * v;
else
return v * v * x;
}
double pow(double x, int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (n < 0)
return 1.0 / power(x, -n);
else
return power(x, n);
}
};
最佳答案
您正在考虑在 n % 2 != 0
情况下 n
是否为负,但在 else
情况下则不然。为了更清楚地说明,我将在不同的递归情况下处理它。从 if
block 中取出负 n
处理,并在 if(n == 0)
行之后添加此行。
if (n < 0) return 1 / myPow(x, -n);
这也消除了您在这一行中执行的整数除法:return (1/t * t * x);
。它还存在错误,您应该除以 t
,乘以 t
,然后乘以 x
,而不是除以整个乘积.
关于java - 在java中不使用math lib实现pow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30855885/