首页 > 代码库 > Pow(x, n)

Pow(x, n)

Implement pow( x, n ).

思路:利用位运算来求解:当n为正时,其不同位取1,对应乘上x的不同次幂。从低位往高位,按2倍关系增长。该解法需要注意:当n取INT_MIN时,其负值为原值,需要特殊考虑。貌似此处不需要考虑double溢出的情况。另外,网上还有二分递归调用的解法。

 1 class Solution { 2 public: 3     double pow( double x, int n ) { 4         if( n == 0 ) { return 1.0; } 5         if( x == 0.0 ) { return 0.0; } 6         double ret = 1.0; 7         if( n < 0 ) { 8             x = 1.0 / x; 9             if( n == INT_MIN ) {10                 ret = x;11                 ++n;12             }13             n = -n;14         }15         while( n ) {16             if( n & 1 ) {17                 ret *= x;18             }19             x *= x;20             n >>= 1;21         }22         return ret;23     }24 };

 

Pow(x, n)