在计算float和double型的变量时,判断值为0不能直接判断是否等于0,因为计算机表示小数时存在误差,所以判断两个数的误差的绝对值很小即可认为相等。
在要做除法运算时,如果除以2,用右移运算代替可以提高效率。
1 #include2 using namespace std; 3 class Solution { 4 public: 5 double Power(double base, int exponent) { 6 if (base == 0) 7 { 8 return 0; 9 }10 if (exponent == 0)11 {12 return 1;13 }14 unsigned int absexponent = (unsigned int)exponent;//给指数取绝对值15 if (exponent < 0)16 {17 absexponent = (unsigned int)(-exponent);//如果是负数直接强转类型后数值错误,所以给他改正回去18 }19 double re=1;20 if(absexponent !=1)21 { 22 re = Power(base, absexponent >> 1);//右移除以223 re *= re;24 }25 26 if (absexponent & 0x1)//与1进行与运算判断这个数是否为奇数27 {28 re *= base;29 }30 if (exponent < 0)31 {32 re = 1 / re;33 }34 return re;35 }36 };37 int main()38 {39 Solution so;40 cout << so.Power(2, 4) << endl;41 return 0;42 }
我开始拿到这个题还在想这不是pow函数可以解决的事情吗?看了答案发现就是要注意已有的函数的实现方法。其中有一些小细节要注意。