2016-04-19 19 views
0

これは一般的なインタビューの質問です。私自身のpow関数を実装する。 オンラインで利用できるいくつかの一般的な再帰的アプローチがありますが、私はそれを繰り返し実行しようとしています。コードはn> 0で動作しますが、0より小さくなると少し失われます。ここに私のコードがあります。Javaで独自のpow関数を実装する

public double myPow(double x, int n) { 

     if(x == 0) return 0; 
     if(n == 0) return 1; 

     double result = 1; 
     if(n > 0){ 
      for(int i=1; i <= n; i++){ 
       result = result * x; 
      } 
     }else{ 
      for(int i=1; i<= n; i++){ 

       //calculate the nth root 
      } 
     } 

     return result; 
    } 

n番目のルートを計算するのに役立つヘルプ。

+2

'N'が負の場合、 'n'thルートがありません。 x ^( - n)= 1 /(x^n)である。 n番目の根はx ^(1/n)です。 – rgettman

+0

'myPow(0.0,0)'は '0'を返します。それはあなたが欲しいものですか?代わりに例外をスローする方が適切なようです。 – Gendarme

+0

@rgettmanあなたは私の間違いです。 – Zeus

答えて

-1

これを試してみると、私はJavaを実践していたときにこれを書きました。アイデアは5^62 = 5 ^(32 + 16 + 8 + 4 + 2)= 5^32 * 5^16 * 5^8 * 5^4 * 5^2であり、バイナリコードでは62は00111110です。

double pow(double x, int n){ 
    int i; 
    double result; 
    result = 1; 
    i = x; 
    while(n != 0){ 
     if(n & 1 == 1){ 
      result *= i; 
     } 
     i *= i; 
     n>>1; 
    } 
    return result; 
} 
+0

前述のとおり、私は反復解を見つけようとしています。私はこの再帰的なオプションを知っています。 – Zeus

+0

ご迷惑をおかけして申し訳ありませんが、私は私の答えを更新しました。 @ゼウス –

1

私はあなたがそれを行うことができますね:( - N)= 1/X^n個のx ^(ため)

double positive_pow(double x, int n) { 

     if(x == 0) return 0; 
     if(n == 0) return 1; 

     double result = 1; 
     if(n > 0){ 
      for(int i=1; i <= n; i++){ 
       result = result * x; 
      } 
     }else{ 
      for(int i=1; i<= n; i++){ 

       //calculate the nth root 
      } 
     } 

     return result; 
    } 

public double pow(double x, int n) { 
    if (n > 0) return positive_pow(x, n); 
    else if (n == 0) return 1; 
    else return 1/positive_pow(x, 0-n); 
} 

これは最短ではありません。ここ

コードですこれを実装する方法は基本関数に基づいており、再帰的に計算するか、 Math関数を使いこなすよりは明らかです。

0

これは動作します。

このコードは負のパワーでも結果を返します。私は、負のパワーの私の計算のための変数​​を使用していた説明については.....

public static double Pow(int x,int n){ 
    if(x == 0) return 0; 
    if(n == 0) return 1; 

    double result = 1; 
    if(n > 0){ 
     for(int i=1; i <= n; i++){ 
      result = result * x; 
     } 
    } 

    else{ 

     int p=x; 

     for(int i=0; i>n; i--){ 
      if(result==1){ 
       result= 1/(result*x); 
       result++; 
      } 

      else{ 
       p=p*x; 
       result= (1.0)*1/p; 
      } 

     } 
    } 
    return result; 
} 
関連する問題