Question:Implement pow(x, n).
问题:求X的n次方
思路: 这个题比较简单,但是肯定不能通过遍历的方法求值,需要通过二分法的思想,依次把N往下分,考虑的边界条件(1)x=+1(2)x=-1,n有可能为奇数或者偶数(3)n=0 (3)n=1(4)n=负数
具体实现参考以下代码:
1 double Pow(double x, int n) { 2 if (0 == n) 3 return 1; 4 if (1 == n) 5 return x; 6 if (abs(x-1)<0.000001) //x=1时 7 return 1; 8 if (abs(x + 1) < 0.000001) //x=-1时,n分两种情况 9 return n&0x1?-1:1; 10 if (n < 0) //n<0的情况 11 return 1.0/Pow(x, -n); 12 double result = Pow(x, n>>1); //>>为右移1位,除2操作,效率较高 13 if (n & 0x1){ //n&0x1判断是否为奇数,效率较高 14 return result*result*x; 15 } 16 else{ 17 return result*result; 18 } 19 }