本文主要是介绍【剑指Offer】11. 数值的整数次方,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;elsereturn false;}};int main()
{cout << Solution().Power(2.5, -2) << endl;system("pause");return 0;
}
这篇关于【剑指Offer】11. 数值的整数次方的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!