牛客网《剑指Offer》 编程 12.数值的整数次方

题目描述

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

解题思路

一般情况下都能够想到的代码是

double normalPower(double base,int exponent){
        double result=1.0;
        for(int i=1;i<=exponent;i++){
            result*=base;
        }
        return result;
    }

但是考虑边界情况是:

1. 底数为0;

2.指数为0;

3.指数为负数。

考虑了这三种情况,思路就完整了。

另外关于浮点数的比较问题:double和float不能够直接==进行比较,因为计算机舍取的精度问题。因此可以用这种方式:

doubel a 和double b,(a-b)>-EPSILON&&(a-b)<EPSOLON,查看相减的值是不是在某一个范围内。

代码实现

double Power(double base, int exponent) {
        //现在要考虑的特殊情况,即base为0时怎么处理;
        //特殊情况:exponent为0时怎么处理。
        double result=1.0;
        if(equal(base,0.0)){return 0.0;}
        else if(exponent==0){return 1.0;}
        else if(exponent>0){//exponent为正数
            result=normalPower(base,exponent);
            return result;
        }else{//exponent为负数
            exponent=-exponent;
            result=normalPower(base,exponent);
            result=1/result;
            return result;
        }
    }
    double normalPower(double base,int exponent){
        double result=1.0;
        for(int i=1;i<=exponent;i++){
            result*=base;
        }
        return result;
    }
    bool equal(double a,double b){
        if((a-b>-1e-5)&&(a-b<=1e-5)){
            return true;
        }else{
            return false;
        }
    }

猜你喜欢

转载自blog.csdn.net/eriHanami/article/details/82584830