题目描述
给定一个double类型的浮点数a和int类型的整数m。求a的m次方。
分析
可以采取暴力的解决办法,把a乘以m次就可以得到结果,但我们肯定不是想要这样的方法。
观察相乘的过程,比如a^7,其实可以写成a^1*a^2*a^4,而且a^4=a^2a^2, a^2=aa,我们可以利用高次方的幂可以由低次方的幂相乘得来。
代码实现
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; }