第十一题 数值的整数次方

例如:2^8可以理解为两个2^4相乘,而2^4是两个2^2相乘,2^2是两个2相乘,所以一共只计算了三次,用递归的方法比较高效。

bool Equal(double num1,double num2)
{
    if((num1-num2 > -0.00001) && (num1-num2 < 0.00001))
        return true;
    else
        return false;
}

 double PowerWithUnsignedExponent(double base,unsigned int exponent)
 {
     if(exponent == 0)
         return 1;
     if(exponent == 1)
         return base;

     double result = PowerWithUnsignedExponent(base,exponent >> 1);
     result *= result;
     if((exponent & 1) == 1)
         result *= base;

     return result;
 }

bool g_InvalidInput = false;
double Power(double base,int exponent)
{
    g_InvalidInput = false;

    if(Equal(base,0.0)&&exponent<0)
        g_InvalidInput = true;
    unsigned int absExponent = (unsigned int) exponent;
    if(exponent < 0)
        absExponent = (unsigned int) (-exponent);

    double result = PowerWithUnsignedExponent(base,absExponent);
    if(exponent < 0)
        result = 1.0 / result;

    return result;
}

用右移运算符替代除以2,用位与运算符判断奇数和偶数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值