题目描述
给定一个double类型的浮点数a和int类型的整数m。求a的m次方。
分析
可以采取暴力的解决办法,把a乘以m次就可以得到结果,但我们肯定不是想要这样的方法。
观察相乘的过程,比如a^7,其实可以写成a^1*a^2*a^4,而且a^4=a^2*a^2,
a^2=a*a,我们可以利用高次方的幂可以由低次方的幂相乘得来。
代码实现
function Power(a, m)
{
var isNegative = false;
if(m === 0)
return 1;
else if(m < 0){
if(a === 0)
throw new Error();
else{
isNegative = true;
m = -m;
}
}
var res = 1, cur = a;
while(m !== 0) {
if(m & 1 === 1){
res = res * cur;
}
cur = cur * cur;
m = m >>> 1;
}
return isNegative ? 1/res : res;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。