数值的整数次方

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
 
保证base和exponent不同时为0
 
这个题的关键在于int类型的整数exponent可以是负数.
我的劣质解答:

class Solution {
public:
double Power(double base, int exponent) {
  if(base == 0 && exponent == 0)
    return 0;
  if(base == 0)
    return 0;
  if(exponent == 0)
    return 1;
  double num=1.0;
  if(exponent>0){
  for(int i=1;i<=exponent;i++){
    num *= base;
    }
    return num;
  }
  if(exponent <0){
  int a = (-exponent);
  for(int i=1;i<=a;i++){
    num *= base;
  }
    return 1/num;
  }
  }
};

优质解答:

class Solution {
public:
    double Power(double base, int exponent) {
        long long p = abs( (long long) exponent);  //abs函数负数转换为正数
        double r = 1.0;
        while (p) {  //这样一转换就用一个循环代替了我的两个循环,代码简洁啊
            if (p & 1)
                r *= base;
            base *= base;
            p >>= 1;   //利用存储数为二进制右移来完美解决循环的问题 、、问题这样做和我的整数循环快吗?思考思考
        }
        return ( exponent > 0 ) ? r : 1/r;
    }
};
posted @ 2020-05-21 21:55  转瞬即逝1995  阅读(138)  评论(0编辑  收藏  举报