首页 > 试题广场 >

数值的整数次方

[编程题]数值的整数次方
  • 热度指数:826061 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
实现函数 double Power(double base, int exponent),求base的exponent次方。

注意:
1.保证base和exponent不同时为0。
2.不得使用库函数,同时不需要考虑大数问题
3.有特殊判题,不用考虑小数点后面0的位数。

数据范围: ,保证最终结果一定满足
进阶:空间复杂度 ,时间复杂度

示例1

输入

2.00000,3

输出

8.00000
示例2

输入

2.10000,3

输出

9.26100
示例3

输入

2.00000,-2

输出

0.25000

说明

2的-2次方等于1/4=0.25    
推荐
    /**
     * 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);        
  	}

编辑于 2015-09-20 14:56:57 回复(142)
function Power(base, exponent)
{
    // write code here
//     使用api
//     return base ** exponent
    return Math.pow(base, exponent)
    
}
module.exports = {
    Power : Power
};

发表于 2022-01-25 11:00:07 回复(1)
function Power(base, exponent)
{    var answer = 1;
     var temp = Math.abs(exponent)
        for(var i=temp;i>0;i--){
            answer = base*answer;
        }
        if(exponent>0){
           return answer;
        }
 else return 1/answer;
    }
module.exports = {
    Power : Power
};
发表于 2022-01-02 15:56:53 回复(0)
function Power(base, exponent)
{
    // write code here
    let res = 1 // 任何数的0次方为1
    if(exponent > 0){ // 系数大于0
      for(let i = 0; i < exponent; i++){
        res *= base
      }
    }else if(exponent < 0){ // 系数小于0
      for(let i = 0; i < Math.abs(exponent); i++){
        res /= base
      }
    }
    return res
}

发表于 2021-09-27 08:56:24 回复(0)
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
};

发表于 2021-09-08 14:52:02 回复(0)
es6的冥运算符:
function Power(base, exponent)
{
    // write code here
    return base ** exponent
}




发表于 2021-08-19 15:04:25 回复(0)
判断指数正数、负数、0 三种情况 根据不同的情况递归 其中正数分 奇数偶数
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);
}


发表于 2021-07-01 18:44:23 回复(0)
JavaScript一句话代码😁,指数运算符用起,都不需要Math.pow()函数
function Power(base, exponent)
{
    return base**exponent;
}


编辑于 2021-01-21 02:10:23 回复(0)
function Power(base, exponent)
{
    // write code here
    if(base==0&&exponent==0){
        return 0;
    }else{
        return Math.pow(base,exponent);
    }
}
发表于 2020-09-12 14:27:18 回复(0)
第一种方法:分情况讨论:指数为0,指数为正数,指数为负数的情况。负数时先取绝对值,再计算。
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);
}



发表于 2019-08-29 13:39:31 回复(0)
Math.pow瑟瑟发抖
发表于 2019-08-19 16:41:11 回复(0)
function Power(base, exponent)
{
    // write code here
    return base**exponent;
}

发表于 2019-07-22 13:40:35 回复(0)
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;
    }
}

编辑于 2019-06-18 22:09:51 回复(0)
JS--
function Power(base, exponent)
{
    return Math.pow(base,exponent);
    //return base**exponent;
}

发表于 2019-05-21 22:30:27 回复(0)

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;
}
发表于 2019-05-12 16:05:51 回复(2)
//方法一:
  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);
  }

发表于 2018-05-28 21:17:46 回复(0)
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;
}

发表于 2018-04-22 22:10:13 回复(0)
/**
*	其实本质上还是一个类似斐波那契的算法。
*	因为有正负两种情况,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
};

发表于 2017-09-07 13:23:24 回复(0)

问题信息

难度:
17条回答 163558浏览

热门推荐

通过挑战的用户

查看代码