数值的整数次方

给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent。求 base 的 exponent 次方。保证 base 和 exponent 不同时为 0

本题需要考虑三种情况:

  • exponent == 0
  • exponent > 0
  • exponent < 0

解法一

暴力解法,分三种情况考虑

public class Solution {
    public double Power(double base, int exponent) {
        if(exponent < 0) {
            base = 1 / base;
            exponent = -exponent;
        }
        if(exponent == 0) {
            return 1.0;
        }
        double result = 1.0;
        for(int i = 1; i <= exponent; i++) {
            result *= base;
        }
        return result;
    }
}

解法二

使用快速幂可以解决该问题,假设我们求 x8,如果我们知道 x4,那么 x8 = (x4)2,所以 xn = (xn/2)2

但是还有个小问题,如果 n 是偶数,那么上述没问题。如果 n 是奇数,则 xn = (xn/2)2 * x

public class Solution {
    
    public double Power(double base, int exponent) {
        if(exponent < 0) {
            base = 1 / base;
            exponent = -exponent;
        }
        return q_Power(base, exponent);
    }
    
    private double q_Power(double base, int exponet) {
        if(exponet == 0) {
            return 1.0;
        }
        double result = q_Power(base, exponet / 2);
        if((exponet & 1) != 0) {
            return result * result * base;
        } else {
            return result * result;
        }
    }
}

版权声明:程序员胖胖胖虎阿 发表于 2022年8月29日 下午4:11。
转载请注明:数值的整数次方 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...