剑指offer算法题:数值的整数次方

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

保证base和exponent不同时为0

注意特殊值,负数、0等。

public class Solution {
    public double Power(double base, int exponent) {
        if(exponent == 0)
            return 1;
        int flag = 0; //1表示exponent为负数
        if(exponent < 0) {
            if(base == 0.0)
                throw new IllegalArgumentException();
            exponent = -exponent;
            flag = 1;
        }
        double res = 1.0;
        for(int i = 1; i <= exponent;i++) {
            res *= base;
        }
        return flag == 1 ? 1.0 / res : res;
    }
}

Power2比较高效的算法

public class Solution {
    public double Power(double base, int exponent) {
        if(exponent == 0)
            return 1;
        int flag = 0; //1表示exponent为负数
        if(exponent < 0) {
            if(base == 0.0)
                throw new IllegalArgumentException();
            exponent = -exponent;
            flag = 1;
        }
        double res = Power2(base,exponent);
        return flag == 1 ? 1.0 / res : res;
    }
    private double Power2(double base, int exponent) {
        if(exponent == 0)
            return 1;
        if(exponent == 1)
            return base;
        double res = Power2(base,exponent >> 1);
        res *= res;
        if((exponent & 1) == 1)
            res *= base;
        return res;
    }
}
发布了239 篇原创文章 · 获赞 70 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43777983/article/details/104133378