数值的整数次方
题目
实现函数 double Power(double base, int exponent),求 base 的 exponent 次方。不得使用库函数,同时不需要考虑大数问题
解法
class Solution { private: double myPowCore(double x, int n) { if (n == 0) { return 1; } double res = myPowCore(x, n/2); if(n & 1) { return res * res * x; } else { return res * res; } } public: double myPow(double x, int n) { if(n == 1 || n == 0) { return n == 1 ? x : 1; } if(n > 0){ return myPowCore(x, n); } return myPowCore(1/x, n); } };
拓展
- 求a的n次方公式如下
a^n/2*a^n/2 a^n= a^(n-1)/2*a(n-1)/2*a
2.用位运算&左移一位代表除以2,用与运算代替取余(%2)来判断是否是奇数。位运算效率更加高
3.用于判定两个 double 型数据是否相等,不能直接用 == 只能用两者之间的差值在一个很小的范围内来判断