gpt4 book ai didi

java - 在java中不使用math lib实现pow

转载 作者:行者123 更新时间:2023-12-01 11:25:20 27 4
gpt4 key购买 nike

我做了这样的代码:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com