#include <iostream>
using namespace std;
bool Ifvalid = false;
bool equal(double num1, double num2)
{
if ((num1 - num2 > -0.0000001) && (num1 - num2 < 0.0000001))
return true;
else
return false;
}
double PowWithExponent(double base, int exponent)
{
double PowResult = 0.0;
if (exponent == 0)
return 1;
if (exponent == 1)
return base;
PowResult = PowWithExponent(base, exponent >> 1);
//迭代+中间变量,A^n=(A^(n/2))*(A^(n/2)),当n是偶数
//右移运算符exponent>>1代替expont/=2,提高代码运行速度
PowResult *= PowResult;
if ((exponent&0x1) == 1)
//判断exponent是否是奇数,(exponent&0x1)比求余快
PowResult *= base;
return PowResult;
}
double pow_(double base, int exponent)
{
//if (base == 0.0&&exponent<0)
if (equal(base, 0.0) && exponent<0)
{
Ifvalid = true;
return 0.0;
}
unsigned int absExponent = (unsigned int)exponent;
if (exponent < 0)
{
unsigned int absExponent = exponent*(-1);
}
double Result = PowWithExponent(base, absExponent);
if (exponent < 0)
Result = 1 / Result;
return Result;
}
int main()
{
double MainResult = pow_(11, 3);
if (Ifvalid == true)
{
cout << "输入基数是0,指数小于0,无法计算 ";
cout << endl;
exit(-1);
}
cout << MainResult << endl;
return 0;
}
剑指offer面试题16---数值的整数次方
猜你喜欢
转载自blog.csdn.net/qq_34793133/article/details/80794621
今日推荐
周排行