剑指offer面试题16---数值的整数次方

#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;
}

猜你喜欢

转载自blog.csdn.net/qq_34793133/article/details/80794621
今日推荐