实现函数 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
};
/** * 1.全面考察指数的正负、底数是否为零等情况。 * 2.写出指数的二进制表达,例如13表达为二进制1101。 * 3.举例:10^1101 = 10^0001*10^0100*10^1000。 * 4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。 */ public double Power(double base, int n) { double res = 1,curr = base; int exponent; if(n>0){ exponent = n; }else if(n<0){ if(base==0) throw new RuntimeException("分母不能为0"); exponent = -n; }else{// n==0 return 1;// 0的0次方 } while(exponent!=0){ if((exponent&1)==1) res*=curr; curr*=curr;// 翻倍 exponent>>=1;// 右移一位 } return n>=0?res:(1/res); }