劍指offer程式碼解析——面試題11求a的b次方
阿新 • • 發佈:2019-01-30
/** * 題目:實現a的b次方 * @author 大閒人柴毛毛 */ public class Power { /** * 分析:a的b次方就是將a連乘b次, * 本題的邏輯性不難,關鍵在於程式的健壯性, * 需要將可能的情況考慮全面。 * @param a 底數 * @param b 指數 * @return a的b次方 */ public static double power(double a,int b){ //若底數為0,則結果為0 if(Power.equal(a,0.0)) return 0; //若指數為0,則結果為1 if(b==0) return 1; //計算a^|b|,若指數為負數,則取b的絕對值 double c = a;//c存放計算結果 for(int i=0; i<(b<0?-b:b)-1; i++){ c *= a; } //輸出結果 if(b<0) return 1/c; else return c; } /** * 由於float、double都存在精度問題,float、double進行計算時得不到精確的結果, * 因此誤差若小於0.0001,我們就認為近似相等,因此需要定義判斷近似相等的函式。 */ /** * 比較兩個double是否近似相等 * PS:若誤差在0.0001內就認為相等 * @param a * @param b * @return 是否近似相等 */ public static boolean equal(double a, double b){ if(a-b<=0.0001 && a-b >=-0.0001) return true; else return false; } }