实现函数 double Power(double base, int exponent),求base的exponent次方。
注意:
1.保证base和exponent不同时为0。
2.不得使用库函数,同时不需要考虑大数问题
3.有特殊判题,不用考虑小数点后面0的位数。
数据范围:
,
,保证最终结果一定满足 
进阶:空间复杂度
,时间复杂度 %5C)
进阶:空间复杂度
2.00000,3
8.00000
2.10000,3
9.26100
2.00000,-2
0.25000
2的-2次方等于1/4=0.25
function Power(base, exponent) { let result = 1; base = exponent > 0 ? base : (1/base); exponent = Math.abs(exponent) while(exponent-- > 0){ result = result * base } return result } module.exports = { Power : Power };
function Power(base, exponent) { // write code here if(exponent == 0) return 1; if(exponent < 0) return 1 / Power(base, -exponent); if(exponent & 1 ) return base * Power(base, exponent - 1); return Power(base * base, exponent / 2); }
function Power(base, exponent) { if(exponent == 0){ return 1; } //指数e为正数的情况 var a = base; var flag = 1; if(exponent < 0){ flag = 0; exponent = Math.abs(exponent); } for(var i = 2; i<=exponent; i++){ a *= base; } //指数为负数的情况 if(flag == 0){ a = 1/a; } return a; }第二种方法:
function Power(base, exponent) { return Math.pow(base,exponent); }
function Power(base, exponent) { // write code here var res = 1; if(exponent > 0) { for(var i = 0; i < exponent; i++){ res = res*base; } return res; }else if(exponent == 0){ return 1 }else{ for(var i = 0; i < -exponent; i++){ res = res*base; } return 1/res; } }
JavaScript
方法一:调用系统函数
function Power(base, exponent) {
return Math.pow(base, exponent);
}
方法二:暴力,速度慢;
function Power(base, exponent) {
var result = 1;
if (base == 0 && exponent < 0) {
throw new Error('输入错误');
}
for (var i = 0; i < Math.abs(exponent); i++) {
result *= base;
}
return exponent > 0 ? result : 1 / result;
}
方法三:简单快速幂
思路:https://blog.csdn.net/hkdgjqr/article/details/5381028
function Power(base, exponent) {
var result = 1;
if (base == 0 && exponent < 0) {
throw new Error('输入错误');
}
var exp = Math.abs(exponent);
while (exp != 0) {
if ((exp & 1) == 1) {
result *= base;
}
base *= base; // 翻倍
exp >>= 1; // 右移
}
return exponent > 0 ? result : 1 / result;
}
//方法一: function Power(base, exponent) { // write code here var result = 1, flag = 0; if (exponent == 0) return 1; else if (base == 0) return 0; else if (exponent < 0) { exponent = Math.abs(exponent); flag = 1; } while (exponent--) { result *= base; } return flag == 0 ? result : (1 / result); } //方法二:使用移位方法,10^1101=10^0001*10^0100*10^1000 function Power(base, exponent) { // write code here var result = 1, flag = 0; if (exponent == 0) return 1; else if (base == 0) return 0; else if (exponent < 0) { flag = 1; exponent = Math.abs(exponent); } while (exponent != 0) { if (exponent & 1 == 1) { result *= base; } base *= base; exponent = exponent >> 1; } return flag == 0 > 0 ? result : (1 / result); }
function Power(b, e) { if(e === 0) return 1; if(e < 0) return 1.0/Power(b, -e); let rel = b; for(let i = 2; i <= e; ++i){ rel *= b; } return rel; }
/** * 其实本质上还是一个类似斐波那契的算法。 * 因为有正负两种情况,for循环比较麻烦。 * 位运算效率高,来替代取余和乘除法运算。 */ function Power(base, exponent) { // write code here if (base === 0 && exponent < 0) { throw new Error('分母不能为零') } if(base === 0 || base === 1) { return base; } if(exponent === 0) { return 1; } else if(exponent === 1) { return base; } else if(exponent === -1) { return 1/base; } var result = Power(base, exponent >> 1); result = result * result; if (exponent & 1) { result = result * base; } return result } module.exports = { Power : Power };