1

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

4 に答える 4

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

于 2013-03-09T12:06:41.013 に答える
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;
}
于 2013-03-09T12:20:50.387 に答える
-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 ;
}
于 2013-03-09T12:04:17.183 に答える
-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;
}
于 2013-03-09T12:23:51.440 に答える