class Solution { public: double Power(double base, int exponent) { //STL标准库源码 /* //template <class T,class Integer, class MonoidOperation> //T power_this(T x, Integer n, MonoidOperation op){ // 可以看成求pow(x, n) if (n == 0) return identity_element(op); // 可以看成 1 else{ while ((n & 1) == 0){ n >>= 1; x = op(x, x); //op看成乘法 } T result = x; // 遇到 二进制中从低位到高位的第一个 1 n >>= 1; while (n != 0){ x = op(x, x); if ((n & 1) != 0) result = op(result, x); n >>= 1; } return result; } } */ //转换为>0 if(exponent<0){ base=1/base; exponent=-exponent; } double x=base;//记录base^0,base^1,base^2... double ret=1.0; while(exponent){ if(exponent&1){ ret*=x;//二进制位是1的,乘进去; } x*=x;//不断增大base*base*base... exponent>>=1;//二进制位移动 } return ret; // c++11支持,此类型次方 // pow(base,exponent); // if(exponent==0) return 1.0; // double res=1; // if(exponent>0){ // while(exponent--) res*=base; // return res; // }else // return 1/Power(base,-exponent); // if(exponent<0){ // base=1/base; // exponent=-exponent; // } // double ret=1.0; // while(exponent--){ // ret*=base; // } // return ret; // if(exponent==0) return 1.0; // if(exponent<0){ // base=1/base; // exponent=-exponent; // } // double ret=Power(base,exponent/2); // if(exponent&1){//奇数 // //if(exponent%2==1){ // return base*ret*ret; // }else{ // return ret*ret; // } } };