1、浮点数的比较不能直接用“==”,精度问题
2、代码的鲁棒性,考虑非正常情况
3、0的0次方=1
4、unsigned int,计算机中数字都用补码表示
5、移位运算
6、递归算法
#include <iostream>
using namespace std;
class Solution
{
public:
bool g_InvalidInput = false;
double Power(double base, int exponent) {
g_InvalidInput = false;
if (equal(base, 0.0) && 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)
return 1.0 / result;
return result;
}
double PowerWithUnsignedExponent(double base, int exponent)
{
if (exponent == 0)
return 1;
if (exponent == 1)
return base;
double result = PowerWithUnsignedExponent(base, exponent >> 1);
result *= result;
if (exponent & 0x1 == 1)
result *= base;
return result;
}
bool equal(double num1,double num2)
{
if ((num1 - num2) > -0.0000001 && (num1 - num2) < 0.0000001)
return true;
else
return false;
}
};
int main()
{
cout << Solution().Power(2.5, -2) << endl;
system("pause");
return 0;
}