标签:需要 二进制 负数 0.00 res col nbsp tle 比较
class Solution { public: double Power(double base, int exponent) { if(base < 0.000001 && base > -0.000001){ return 0.0; } if(exponent == 0){ return 1.0; } int tmp = abs(exponent); double res = Power(base,tmp >> 1); res *= res; if(tmp % 2 == 1){ res *= base; } if(exponent < 0){ res = 1.0 / res; } return res; } };
解法2:快速幂。
tmp & 1 == 1,只能判断最后一位,0011 & 0010 = 0010 = 2.
快速幂的原理相当于将指数变为二进制,分别计算每一二进制位的值然后相乘。
一定记住对于这种有指数的一定要判断是否为负数,将负数转化为整数计算后取反,当然必须判断底数不为0;
if(1 & tmp){ res = res * base; } base = base * base; tmp = tmp >> 1;
class Solution { public: double Power(double base, int exponent) { if((base < 0.00001) && (base > -0.00001)){ return 0.0; } if(exponent == 0){ return 1.0; } double res = 1.0; int tmp = abs(exponent); while(tmp){ if(1 & tmp){ res = res * base; } base = base * base; tmp = tmp >> 1; } if(exponent < 0){ res = 1.0 / res; } return res; } };
标签:需要 二进制 负数 0.00 res col nbsp tle 比较
原文地址:http://www.cnblogs.com/dingxiaoqiang/p/7922493.html