您的位置:首页 > 其它

Q11:数值的整数次方

2016-07-23 08:32 288 查看
2016-07-12

Q11:数值的整数次方

public
class
Q11 {
   /**
    * 题目:数值的整数次方
    * 题目说明:实现函数double Power(double base,
int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
    * 解法一:采用简单的思路for循环实现。
    * 解法二:考虑边界值和判断是否出错的情况。(补充:高效率方法)
    */
   public
static void
main(String[] args) {
      Q11 test = new Q11();
      System.out.println(test.Power1(2.0, 3));
      System.out.println(test.Power2(2.0, 3));
   }
   //解法一
   public
double
Power1(double base,
int exponent){
      double result=1.0;
      for(int i=1; i<=exponent; i++){
         result *= base;
      }
      return result;
   }
   //解法二
   //定义一个全局变量g_InvalidInput来标识是否出错。当出错时标识为true,否则为false。
   boolean
g_InvalidInput = false;
   public
double
Power2(double base,
int exponent){
      g_InvalidInput =
false
;
      //判断是否合法,通过设置全局变量来观察
      if(equal(base,0.0)&&exponent<0){
         g_InvalidInput =
true
;
         return 0.0;
      }
      int absExponent;
      if(exponent<0){
         absExponent=-exponent;
      }else {
         absExponent=exponent;
      }
     
      //调用递归函数实现幂次方
      double result = PowerExponent(base, absExponent);
      if(exponent<0){
         result=1.0/result;
      }
     
      return result;
   }
   //PowerExponent()的实现过程
   public
double
PowerExponent(double base,
int exponent){
      double result = 1.0;
      for(int i=1; i<=exponent; i++){
         result *= base;
      }
      return result;
   }
   //定义函数判断两个数是否相等。
   public
boolean
equal(double num1,
double num2){
      if((num1-num2>-0.0000001)&&(num1-num2<0.0000001)){
         return
true
;
      }else {
         return
false
;
      }
   }
  
   //补充:在上述两种方法中都是采用for循环来实现乘幂现象。这种方法的时间复杂度为O(n)级别。除了上述方法外,可以采用乘方方法来降级时间复杂度到O(logn)级别。
   //例如:a^n=(a^n/2)*(a^n/2)
   public
double
PowerExponent2(double base,
int exponent){
      if(exponent==0){
         return 1;
      }
      if(exponent==1){
         return base;
      }
      double result = PowerExponent2(base, exponent);
      result *= result;
      if((exponent & 0x1) == 1){
         result *= base;
      }
      return result;
   }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: