题目:

实现 pow(x, n) ,即计算 x 的 n 次幂函数。不得使用库函数,同时不需要考虑大数问题。

示例:

输入:x = 2.00000, n = 10 输出:1024.00000

思路:

快速幂方法:分析n的二进制表达式,进行公示转换:

整数加上分数的算法(数值的整数次方)(1)

注意: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; } };

,