数值的整数次方

开始写代码之前需要考虑的问题:

  1. 如何判断2个浮点数相等
  2. 关于底数
    -底数为零时,指数为0 和指数为负需要特殊处理
  3. 关于指数
    -指数如何分正负处理
  4. 高效算法
    -result*=base 这种解法效率太低,用递归公式来解决(联系到斐波那契数列)
    -用exponent>>1代替除以2
    -用 exponent&0x1代替模运算判断奇偶
class Solution {
public:
    double Power(double base, int exponent) {
        if(equal(base,0.0) && exponent <=0)//底数=0,指数<=0时,返回0.0,并且设置全局变量
            return 0.0;
        int abs_exponent = abs(exponent);
        double result  = getPower(base,abs_exponent);
        if(exponent<0)
        {
            result = 1.0/result;//这里用1.0
        }
        return result;
    }
    
    double getPower(double base,int abs_exponent)//求幂运算,传入的指数一定为正,并且用高效率方法做
    {
        double result = 0.0;
        if(abs_exponent == 0)
            return 1.0;        
        if(abs_exponent == 1)
            return base;
        result = getPower(base,abs_exponent>>1);//用位运算效率比乘除高
        result*=result;
        if(abs_exponent & 0x1 == 1)
            result*=base;
        return result;
    }
    
    bool equal(double a,double b)
    {
        if( abs(a-b) <0.00000001 )
        //if( (a-b > -0.00000001)&& (a-b)<0.00000001 )//注意判断a,b的差在一定范围内
            return true;
        return false;
    }
};

你可能感兴趣的:(数值的整数次方)