leetcode-数值的整数次方
题目传送门:题目链接
题目大意就是给定两个数字:m和n,实现pow(m,n)的效果,我最开始的想法比较简单,那就是:区分一下n的正负,然后计算出m的ans(n)次方,然后如果n是个负数,最终结果再被1除一下,很显然这样会错==
其实正确的做法是进行快速幂运算,奈何太久了忘记如何操作,举一个例子来说5的10次方
理论上,任意的m的n次方运算都可以转成这个样子,至于每一项的值是否要加到最终结果中去,则是取决于对应的n的特定位,是0还是1,显然,这里涉及到了一些位运算的知识,有兴趣可以看一下大佬的知乎文章:快速幂讲解
下面就是我的代码啦,就是按照上面的思路进行了代码的实现
double result = 1.0;
long nn = n;
if(nn < 0) {
nn = -nn;
x = 1.0 / x;
}
while(nn>0) {
if((nn&1)==1) {
//当前这一位是1
result = result * x;
}
x = x * x;
nn = nn >> 1;
}
return result;
这个题目的数据类型范围很诡异,用long才能通过