当前位置: 面试刷题>> 的幂 (经典算法题500道)


题目描述补充

设计一个函数,该函数接收两个整数base(底数)和exponent(指数)作为参数,并返回baseexponent次幂的结果。要求该函数能够处理正整数、负整数以及零的幂运算,但不需要考虑浮点数和非常大的整数(超出语言基本数据类型表示范围)的情况。

注意:

  • 如果exponent是负数,则返回1 / (base的|exponent|次幂)的结果,其中|表示绝对值。
  • 如果base为0且exponent小于等于0,则函数应返回0的0次幂在数学上是未定义的,但根据某些约定可以返回1(视具体实现而定,这里我们按照返回1来处理)。
  • 任何数的0次幂定义为1,除了0的0次幂(已在上面处理)。

PHP代码示例

function power($base, $exponent) {
    if ($exponent == 0) {
        return 1;
    }
    
    if ($base == 0 && $exponent <= 0) {
        // 0的负数次幂或0的0次幂(按约定返回1)
        return 1;
    }
    
    $result = 1;
    if ($exponent < 0) {
        $exponent = -$exponent;
        $result = 1 / powerHelper($base, $exponent);
    } else {
        $result = powerHelper($base, $exponent);
    }
    
    return $result;
}

function powerHelper($base, $exponent) {
    $result = 1;
    while ($exponent > 0) {
        if ($exponent % 2 == 1) {
            $result *= $base;
        }
        $base *= $base;
        $exponent = intval($exponent / 2);
    }
    return $result;
}

// 示例
echo power(2, 3); // 输出 8
echo power(2, -2); // 输出 0.25
echo power(0, 0); // 输出 1

Python代码示例

def power(base, exponent):
    if exponent == 0:
        return 1
    
    if base == 0 and exponent <= 0:
        return 1  # 0的负数次幂或0的0次幂(按约定返回1)
    
    result = 1
    if exponent < 0:
        exponent = -exponent
        result = 1 / power_helper(base, exponent)
    else:
        result = power_helper(base, exponent)
    
    return result

def power_helper(base, exponent):
    result = 1
    while exponent > 0:
        if exponent % 2 == 1:
            result *= base
        base *= base
        exponent //= 2
    return result

# 示例
print(power(2, 3))  # 输出 8
print(power(2, -2))  # 输出 0.25
print(power(0, 0))  # 输出 1

JavaScript代码示例

function power(base, exponent) {
    if (exponent === 0) {
        return 1;
    }
    
    if (base === 0 && exponent <= 0) {
        // 0的负数次幂或0的0次幂(按约定返回1)
        return 1;
    }
    
    let result = 1;
    if (exponent < 0) {
        exponent = -exponent;
        result = 1 / powerHelper(base, exponent);
    } else {
        result = powerHelper(base, exponent);
    }
    
    return result;
}

function powerHelper(base, exponent) {
    let result = 1;
    while (exponent > 0) {
        if (exponent % 2 === 1) {
            result *= base;
        }
        base *= base;
        exponent = Math.floor(exponent / 2);
    }
    return result;
}

// 示例
console.log(power(2, 3)); // 输出 8
console.log(power(2, -2)); // 输出 0.25
console.log(power(0, 0)); // 输出 1

码小课网站中有更多相关内容分享给大家学习,包括但不限于算法基础、数据结构、面试技巧等,欢迎访问码小课网站深入探索。

推荐面试题