题目描述

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

输入

2,3

返回值

8.00000

题目本身不是很难,但是要注意考虑多种情况

要考虑exponent==0的情况和exponent<0的情况,当exponent<0的时候还要考虑base等于0的情况,同时由于base为double类型,因此要特别注意能写成
base==0.0,而应该写成
abs(base-0.0)<Epslion
class Solution {
    private:
        double Epslion = 1e-8;
public:
    double Power(double base, int exponent) {
        if(abs(base-0.0)<Epslion)
            return 0;
        if(exponent < 0)
            return 1/Power(base, abs(exponent));
        else if(exponent == 0)
            return 1;
        else{
            if(exponent==1)
                return base;
            else
                return base * Power(base, exponent-1);
        }
        
    }
};

剑指offer上高效的写法:

当n为偶数时an=an/2*an/2

当n为奇数时an=an/2*an/2*base

public class Solution {
    private double e = 1e-8;
    public double Power(double base, int exponent) {
        if(Math.abs(base-0.0)<e)
            return 0.0;//0的0次方可以返回0或者1
        if(exponent == 0)
            return 1;
        if(exponent == 1)
            return base;
        if(exponent < 0){
            return 1/Power(base, -exponent);
        }
        double result = Power(base,exponent>>1);
        if((exponent & 0x1)==0)
            return result * result;
        else
            return result * result * base;
  }
}

 快速幂法:

class Solution {
    public double myPow(double x, int n) {
        if(x==0) return 0;
        long ex = n;
        double res = 1.0;
        if(n<0){
            x = 1.0/x;
            ex = -ex;
        }
        while(ex>0){
            if((ex&1)==1)
                res *= x;
            x = x * x;
            ex >>= 1;
        }
        return res;
    }
}

 

 

posted on 2020-11-16 21:32  曹婷婷  阅读(99)  评论(0编辑  收藏  举报