在计算float和double型的变量时,判断值为0不能直接判断是否等于0,因为计算机表示小数时存在误差,所以判断两个数的误差的绝对值很小即可认为相等。
在要做除法运算时,如果除以2,用右移运算代替可以提高效率。
1 #include<iostream> 2 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);//右移除以2 23 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函数可以解决的事情吗?看了答案发现就是要注意已有的函数的实现方法。其中有一些小细节要注意。