剑指offer十三:数值的整数次方
#include<iostream>
using namespace std;
double PowerWithUnsignedExponent(double base, int exponent);
bool equal(double num1, double num2)
{
if (abs(num1 - num2) < 0.0000001)
return true;
else
return false;
}
bool InvalidInput = false;
double Power(double base, int exponent)
{
InvalidInput = false;
double result;
//指数小于0时,分母为0,无意义
if (equal(base, 0) && exponent < 0 )
{
InvalidInput = true;
return 0;
}
if (exponent < 0)//指数小于0(要考虑分母为0时,即上面的判断)
result = 1/PowerWithUnsignedExponent(base, -exponent);
else//指数大于0
result = PowerWithUnsignedExponent(base, exponent);
return InvalidInput, result;
}
//指数大于0
double PowerWithUnsignedExponent(double base, int exponent)
{
int result = 1;
for (int i = 0; i < exponent; i++)
result *= base;
return result;
}
int main()
{
double base;
int exponent;
cout << "ple input a base:" << endl;
cin >> base;
cout << "pls input a exponent" << endl;
cin >> exponent;
double result = Power(base, exponent);
cout << InvalidInput << endl;
//double result = EffectPower(base, exponent);
cout << result << endl;
}
double EffectPower(double base, unsigned int exponent)
{
if (exponent == 0)
return 1;
if (exponent == 1)
return base;
double result = EffectPower(base, exponent >> 1);
result *= result;
if (exponent % 2 == 1)//指数为奇数
result *= base;
return result;
}