Implement pow(x, n).
class Solution { public: bool equal(double a, double b) { if(abs(a-b) < 0.0000001) return true; return false; } double powPos(double x, unsigned int n) { if( n == 0) return 1.0; if(n == 1) return x; double res = powPos(x, n>>1); res *= res ; if(n&0x01 == 1) res *= x; return res; } double pow(double x, int n) { // Start typing your C/C++ solution below // DO NOT write int main() function if(n == 0) return 1.0; if(equal(x, 0.0)) return 0.0; bool flag = n > 0 ? false : true; // 是否是负数 if(flag) n *= -1; double res = powPos(x, n); if(flag){ if(equal(res, 0.0)) return 0.0; else return 1/res; }else return res; } };
半分法,有个更加快的:http://blog.unieagle.net/2012/08/23/leetcode%E9%A2%98%E7%9B%AE%EF%BC%9Apowxn/