题目:
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
解答:
1 public class Solution { 2 public static void main(String[] args) { 3 double base = 2.1; 4 int exponent = 2; 5 System.out.println(power(base, exponent)); 6 } 7 8 public static double power(double base, int exponent) { 9 if(equal(base, 0.0) && exponent < 0) { 10 return 0.0; 11 } 12 13 // 指数的绝对值 14 int absExponent = Math.abs(exponent); 15 double result = powerWithExponent(base, absExponent); 16 17 if(exponent < 0) { 18 result = 1.0 / result; 19 } 20 21 return result; 22 } 23 24 25 private static double powerWithExponent(double base, int exponent) { 26 if(exponent == 0) { 27 return 1.0; 28 } 29 30 if(exponent == 1) { 31 return base; 32 } 33 34 double result = powerWithExponent(base, exponent>>1); 35 result = result*result; 36 if(exponent & 0x01 == 1) { 37 result = result*base; 38 } 39 40 return result; 41 } 42 43 // important here 44 private static boolean equal(double num1, double num2) { 45 if((num1 - num2) > -0.0000001 && (num1 - num2) < 0.0000001) { 46 return true; 47 } else { 48 return false; 49 } 50 } 51 }