劍指Offer系列(10) 數值的整數次方

2021-08-19 15:19:33 字數 1632 閱讀 7118

題目如下:

實現函式double power(double base , int exponent), 求base的exponent次方。不得使用庫函式,同時不需要考慮大數問題。

這個題目需要注意的有兩點:一是我們需要分情況討論,看似乙個數的整數次方很好求,直接用exponent個base撐起來即可,但實際上我們要分以下幾種情況。(以下用exp代替exponent)

為負數     base的正數次方分之一

base為負數          exp    為0         1

為正數    直接計算

為負數    不存在

base為0        exp           為0        1

為正數    直接計算

為負數   base的正數次方分之一

base為正數          exp    為0       1

為正數  直接計算

第二個要注意的點是,double判等不能用==符號,只能用兩者的差值來判斷。(double 在運算中,由於截尾的原因,總是有誤差的。)可以用如下**判斷:

public static boolean doubleequal(double d1 , double d2)

return false;

}

另外,這裡當判斷完成後直接計算有兩種思路:

1.用while迴圈直接計算:

private static double power1(double base, int i) 

return result;

}

2.運用如下公式遞迴處理:

a^(n/2)*a^(n/2)

a^n =            

a^((n-1)/2)*a^((n-1)/2

**如下:

private static double power1(double base, int i) 

return result;

}

整體**如下:

package com.offer;

public class power

private static double power2(double base, int exp)

if (exp == 1)

double result = power2(base , exp >> 1);

result *= result;

if ((exp & 1) == 1)

return result;

} public static boolean doubleequal(double d1 , double d2)

return false;

} private static double power(double base, int exp)

return 0 ;

} if (exp == 0) else if (exp < 0) else

}private static double power1(double base, int i)

return result;

}}

劍指Offer系列16 數值的整數次方

實現函式double power double base,int exponent 求base的exponent次方。不得使用庫函式,同時不需要考慮大數問題。示例 1 輸入 2.00000,10 輸出 1024.00000 示例 2 輸入 2.10000,3 輸出 9.26100 示例 3 輸入 2...

劍指Offer系列之 數值的整數次方

給定乙個 double 型別的浮點數 base 和 int 型別的整數 exponent。求 base 的 exponent 次方。保證 base 和 exponent 不同時為 0 假設求 x 6x 6 x6已知 6 可以表示成二進位制110 可以表示成 6 0 20 1 21 1 2 26 0 ...

劍指offer系列 12 數值的整數次方

q 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。保證base和exponent不同時為0。c 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32m,其他語言64m t 1.剛剛學習了快速冪,正好用上 這個題要注意,expon...