剣指Offer第2面試験問題16(java実現)
1107 ワード
タイトルの説明
doubleタイプの浮動小数点数baseとintタイプの整数exponentを指定します.baseのexponent次数を求めます.
問題を解く構想.指数が負の場合は、まず指数に対して絶対値を求める、次数の結果を算出してから逆数 をとることができる.底数が0、指数が負の場合、0に対して逆数を求める場合があり、 を特殊に処理する.0の0次方程式は数学的に意味がないため、出力0にしても1にしても許容できる である.次方程式を計算するとき、簡単な遍歴を除いて、私たちは再帰的な思想を使って、以下の公式を使って、計算量を減らすことができます: コード実装
コードの概要
この問題は公式を利用すると少し速くなる.
doubleタイプの浮動小数点数baseとintタイプの整数exponentを指定します.baseのexponent次数を求めます.
問題を解く構想.
public class Problem16a {
public double Power(double base, int exponent) {
int n = exponent;
if(exponent==0){
return 1;
}else if(exponent < 0){
if(base == 0){
throw new RuntimeException(" 0");
}
n = -exponent;
}
double res = PowerUnsignedExponent(base, n);
return exponent<0? 1/res: res;
}
public double PowerUnsignedExponent(double base, int n){
if(n == 0)
return 1;
if(n == 1)
return base;
double res = PowerUnsignedExponent(base, n/2);
res *= res;
if(n%2 == 1)
res *= base;
return res;
}
}
コードの概要
この問題は公式を利用すると少し速くなる.