Implement pow(x, n).
思路:可以连乘,但会超时,所以使用二分法:
注意几点:
1 不要写成pow(x, n/2)* pow(x, n/2) 还是会超时,因为还是会计算两遍,直接使用临时变量tmp= pow(x, n/2),然会return tmp*tmp
2 注意int 有可能为负数
3 注意对于INT_MIN 的处理,他比INT_MAX 的绝对值大于1,直接判读小于0,return pow(x,-n)会越界,所以使用long long 保证其64位,不会越界
class Solution { public: double pow(double x, int n) { long long ln = n; return powl(x, ln); } double powl(double x, long long n) { if(n < 0) return 1/powl(x, -n); if(n == 0) return 1; if(n == 1) return x; if( n & 0x1 == 1) { double tmp = powl(x, n/2); return tmp* tmp * x; } else { double tmp = powl(x, n/2); return tmp* tmp ; } } };