题目:
实现 pow(x, n) ,即计算 x 的 n 次幂函数。不得使用库函数,同时不需要考虑大数问题。
示例:
输入:x = 2.00000, n = 10
输出:1024.00000
思路:
快速幂方法:分析n的二进制表达式,进行公示转换:
注意:n可能是负数,所以在处理前先取正数;INT_MIN取正数可能溢出,所以先把n转成long再取正数。
代码:
class Solution {
public:
double myPow(double x, int n) {
double result=1;
long m=abs((long)n);
for(int i=0; i<32; i )
{
if(i>0)
m=m>>1;
int k=m&1;
if(i==0)
x=x;
else
x=x*x;
if(k==1)
result*=x;
}
if(n<0)
result = 1/result;
return result;
}
};