剑指offer:数值的整数次方(leetcode 50)

题目:

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

保证base和exponent不同时为0

答案:

解法一:

直接使用库函数Math.pow(),代码如下:

public class Solution {
    public double Power(double base, int exponent) {
        return Math.pow(base,exponent);
  }
}

解法二:

使用循环,一个一个乘,要注意:判断指数是否为负;注意指数溢出;代码如下:

public class Solution {
    public double Power(double base, int exponent) {
        if(exponent==0){
            return 1;
        }
        boolean flag = (exponent>0);
        long exp = (long)Math.abs((long)exponent);
        double result = 1;
        for(long i=0;i<exp;i++){
            result = result*base;
        }
        if(!flag){
            result = 1/result;
        }
        return result;
  }
}

解法三:

二分法,代码如下:

public class Solution {
    public double Power(double base, int exponent) {
        if(exponent==0){
            return 1;
        }
        boolean flag = (exponent>0);
        long exp = (long)Math.abs((long)exponent); 
        double result = 1;
        double cur = base;
        for(long i=exp;i>0;i=i/2){
            if(i%2==1){
                result = result*cur;
            }
            cur = cur*cur;
        }
        if(!flag){
            result = 1/result;
        }
        return result;
  }
}
发布了92 篇原创文章 · 获赞 2 · 访问量 8419

猜你喜欢

转载自blog.csdn.net/wyplj2015/article/details/104845288