【劍指Offer學習】【面試題11 :數值的整數次方】
阿新 • • 發佈:2019-01-04
程式碼實現:
public class Test11 { /** * 實現函式double Power(double base, int exponent),求base的exponent次方。 * 不得使用庫函式,同時不需要考慮大數問題。 * * @param base 指次 * @param exponent 冪 * @return 結果 */ public static double power(double base, int exponent) { // 指數和底數不能同時為0 if (base == 0 && exponent == 0) { throw new RuntimeException("invalid input. base and exponent both are zero"); } // 指數為0就返回1 if (exponent == 0) { return 1; } // 求指數的絕對值 long exp = exponent; if (exponent < 0) { exp = -exp; } // 求冪次方 double result = powerWithUnsignedExponent(base, exp); // 指數是負數,要進行求倒數 if (exponent < 0) { result = 1 / result; } // 返回結果 return result; } /** * 求一個數的正整數次冪,不考慮溢位 * * @param base 指次 * @param exponent 冪 * @return 結果 */ public static double powerWithUnsignedExponent(double base, long exponent) { // 如果指數為0,返回1 if (exponent == 0) { return 1; } // 指數為1,返回底數 if (exponent == 1) { return base; } // 遞迴求一半的值 double result = powerWithUnsignedExponent(base, exponent >> 1); // 求最終的值,如果是奇數就還要剩以一次底數 result *= result; if (exponent % 2 != 0) { result *= base; } // 返回結果 return result; } public static void main(String[] args) { System.out.println(0.0000000000000000000000001111 == 0); System.out.println(0.0000000000000000000000000000 == 0); System.out.println(power(2, -4)); System.out.println(power(2, 4)); System.out.println(power(2, 0)); System.out.println(power(0.00000000000000000000000000001, -1)); System.out.println(power(0.00000000000000000000000000001, 1)); System.out.println(power(0.00000000000000000000000000001, 0)); System.out.println(power(0.00000000000000000000000000000, 0)); }
執行結果: