题目:
Implement pow(x, n). (Medium)
分析:
实现库函数求幂运算,遍历一遍是超时的,用快速幂,就是分治的思想,每次把n去掉一半。
注意:n的取值范围,n = MIN_INT时,-n会超范围,这里WA了一次。
代码:
1 class Solution { 2 private: 3 double helper(double x, long long n) { 4 if (n == 0) { 5 return 1; 6 } 7 double result = 1; 8 double p1 = myPow(x, n / 2); 9 if (n % 2 == 0) { 10 return p1 * p1; 11 } 12 else { 13 return p1 * p1 * x; 14 } 15 } 16 public: 17 double myPow(double x, int n) { 18 long long nl = n; 19 if (n > 0) { 20 return helper(x, n); 21 } 22 else { 23 return 1.0 / helper(x, -nl); 24 } 25 } 26 };