不允许使用Math.pow时计算指数?

时间:2013-03-09 11:56:22

标签: java pow

我需要编写一个名为pow2的方法,它接受一个实数基数和一个整数指数作为参数。它应该使基座升高到给定的功率。您的代码应该适用于正指数和负指数。例如,通话pow2(2.0, -2)会返回0.25。不要在解决方案中使用Math.pow。

这是我到目前为止所做的:

public double pow2(double x,int y){
    double total=1;
    for(int i=1;i<=y;i++){
        total*=x;
    }
    return total;
}

但问题是当我尝试拨打pow(2.0, -2)时,它会返回1.0而不是。我该如何实现这种方法?

4 个答案:

答案 0 :(得分:3)

您必须分支,具体取决于您是否具有负值或正值。

这是一个适用于递归的版本:

public double pow2(double x,int y){
    return _pow2(1.0, x, y);
}

private double _pow2(double res, double x, int y) {
    if (y < 0) return _pow2(res/x, x, y+1);
    if (y > 0) return _pow2(res*x, x, y-1);
    return res;
}

如果y太大或太小,那么您将遇到堆栈溢出,因此将其更改为非递归函数将留给操作。

修改:关于您的上一个问题,您将结果设置为1.0,因为!(1 <= -2)从未使用循环体,因此您返回未修改的结果1.0

答案 1 :(得分:1)

好吧,最后如果您想以迭代的方式进行,请先检查y是正还是负。

public double pow2(double x, int y)
{
    double total = 1.0;

    if(y > 0)
    {
        for(int i = 1 ; i <= y ; i++)
        {
            total *= x;
        }
    } 
    else 
    {
        for(int i = -1 ; i >= y ; i--)
        {
            total /= x;
        }
    }
    return total;
}

答案 2 :(得分:-1)

public static void main(String[] args) {

    System.out.println(pow2(2,3));

}

public static double pow2(double x,int y){
    double total=1;
    for(int i=1;i<=y;i++){
        total*=x;
    }
    return total ;
}

答案 3 :(得分:-1)

public static double pow2(double x,int y){
    double total=1;
    if(y>0){
    for(int i=1;i<=y;i++){
        total*=x;
    }
    return total;
    }
    else if (y<0){
        double temp=1/x;//this makes 2 as 1/2
        y=y*-1;         //to have a meaningful iteration if for loop
        for(int i=1;i<=y;i++){
            total*=temp;
        }   
        return total;
    }else
        return 1;
}