首页 > 其他 > 详细

剑指offer:数值的整数次方

时间:2020-11-16 22:33:42      阅读:27      评论:0      收藏:0      [点我收藏+]

题目描述

给定一个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;
  }
}

 

剑指offer:数值的整数次方

原文:https://www.cnblogs.com/ttzz/p/13990866.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!