一、前言
实现 pow(x, n) ,即计算 x
的 n
次幂函数(即,x^n)。
题目链接:Pow(x, n)
二、题目要求
样例 1
输入: x = 2.00000, n = 10 输出: 1024.00000
样例 2
输入: x = 2.10000, n = 3 输出: 9.26100
考察
位运算中等题型、快速幂 建议用时15~30min
三、问题分析
本题是位运算的第17题,没了解过位运算相关知识点可以看这一篇文章,讲解比较详细:
如果你了解过位运算相关知识点,但没有了解过快速幂,可以先看这一篇
这一题其实套用位运算的模板就行了,最主要的是n的范围 -23^1 <= n <= 2^31-1,这不正好是int整形存储二进制的范围吗?
这里要注意一点,因为n有可能小于0,对于这种情况我们还是按照正数判断,最后取倒数就行了。
最后提交测试的时候,发现了几个恶心的测试用例怎么也过不了
最后我修改了题目给定的n,从int 改成long然后就莫名其妙的过了。
四、编码实现
classSolution { public: doublemyPow(doublex, longn) { intflag=1;//判断n负数的标记doublebase=x,ans=1;//初始化if(n<0) { flag=0; n=abs(n);//取正数 } while(n)//快速幂模板 { if(n&1) ans=ans*base; base*=base; n=n>>1; } if(flag)//正数输出结果returnans; else//取倒数输出return1.0*1/ans; } };
五、测试结果
六、总结与提高
这一题是位运算分支的第17题,是快速幂的第2题。快速幂掌握其实不难,在网上找了半天,发现2个典型的快速幂运算,这两题做完快速幂也能基本掌握了。