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

标签 java math

我做了这样的代码:

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/

相关文章:

java - java.util.Timer 中的引用应该是最终的吗?

algorithm - 遍历给定大小的所有树

algorithm - 是否有生成序列所有排列的递归算法的证明?

python - python 数学游戏中不允许否定答案的奇怪问题

c++ - 如何解析质数的倍数 C++?

java - 来自/发往 Odoo/OpenErp 的 XmlRpc 请求/响应中的时间戳(以毫秒为单位)

java - 带有 Spring Boot 和 ibm JDBC 驱动程序的 ClassNotFoundException

java - 有没有办法控制系统光标(向系统发送双击信号)

java - 内存泄漏——Tomcat、Spring MVC

generics - 如何指定一个泛型函数,其工作方式就像有 Int、Double 等父类(super class)型一样?