【剑指Offer】16_数值的整数次方(⭐⭐⭐⭐)
题目:给定一个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;
}
};


浙公网安备 33010602011771号