剑指offer——第十二题

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

解答:默认0的所有次方都为0(包括0的0次方,和0的负幂次方)
a>>1 表示 a/2
a<<1 表示 a×2

判断奇偶:n%2==1 或 (n&1)==1

public class o_12 {

    //非递归
    public double Power(double base, int exponent) {
        double result = 1.0;
        if (base == 0)
            return 0;

        //return Math.pow(base, exponent);

        boolean isNegetive = false;
        if (exponent < 0) {
            isNegetive = true;
            exponent = -exponent;
        }
        for (int i = 0; i < exponent; i++) {
            result *= base;
        }
        if (isNegetive)
            return 1 / result;
        else
            return result;
    }

    //递归
    public double Power2(double base, int exponent) {
        double result = 1.0;
        if (base == 0)
            return 0;
        boolean isNegetive = false;
        if (exponent < 0) {
            isNegetive = true;
            exponent = -exponent;
        }

        result = getTheResult(base, exponent);
        if (isNegetive)
            return 1 / result;
        else
            return result;
    }
    //递归方法
    private double getTheResult(double base, int exponent) {
        if (exponent == 0)
            return 1;
        if (exponent == 1)
            return base;
        double result = getTheResult(base, exponent >> 1);
        result *= result;
        if ((exponent & 1) == 1)
            return result *= base;
        return result;
    }

    public static void main(String[] args) {
        o_12 o12 = new o_12();
        double base = -2.0;
        int exponent = -3;

        double result = o12.Power(base, exponent);
        System.out.println(result);

        double result2 = o12.Power2(base, exponent);
        System.out.println(result2);
    }
}

猜你喜欢

转载自blog.csdn.net/dl674756321/article/details/90107985