首页 > 其他 > 详细

【剑指Offer】16_数值的整数次方(????)

时间:2019-08-27 17:20:05      阅读:103      评论:0      收藏:0      [点我收藏+]

题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0(不需要考虑大数问题)

 

 

bool g_InvalidInput = false; //采用全局变量标识是否出错


class Solution {
public:
    //递归
    double PowerWithUnsignedExponent(double base, unsigned int exponent)
    {
        if(exponent == 0)
        {
            return 1;
        }
        if(exponent == 1)
        {
            return base;
        }
        //若exponent为32:32,16,8,4,2,1 => 
        //result:1,exponent,exponent*exponent,....
        double result = PowerWithUnsignedExponent(base, exponent >> 1); //用右移>>代替 /2
        //exponent为偶数
        result *= result;
        //exponent为奇数
        if((exponent & 0x1) == 1) //用位与&代替求余%
        {
            result *= base;
        }
        return result;
    }
    //指数为正数/负数
    double Power(double base, int exponent) 
    {
        //底数为零,指数是负数
        if( (fabs(base-0.0) <= 0.000001) && (exponent < 0))
        {
            g_InvalidInput = true;
            return 0.0;
        }
        
        //指数为正
        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;
    }
};

  

技术分享图片

 

【剑指Offer】16_数值的整数次方(????)

原文:https://www.cnblogs.com/xiexinbei0318/p/11415962.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!