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;
// }
}
};