剑指offer-数值的整数次方

数值的整数次方_牛客题霸_牛客网

题目描述

描述

实现函数 double Power(double base, int exponent),求base的exponent次方。

注意:

1.保证base和exponent不同时为0。

2.不得使用库函数,同时不需要考虑大数问题

3.有特殊判题,不用考虑小数点后面0的位数。

示例1

输入:

2.00000,3

复制返回值:

8.00000

复制

示例2

输入:

2.10000,3

复制返回值:

9.26100

复制

示例3

输入:

2.00000,-2

复制返回值:

0.25000

复制说明:

2的-2次方等于1/4=0.25    

果果念

又是很久没有刷题了,2333,确实也挺奇怪的,用C++刷题,然后面试Java岗,Java的基础需要扎实啊。好的,回归到这个题目上,经典的快速幂问题。

方法1:递归求解,正常可以想到的方法。

方法2:快速幂,利用二进制的思想进行求解,我之前好像还没有学习过,具体的思路就是拆分。例如:6d=110,那么x^6=x^(110b)=x(2^2+2^1+0^0)=x(2^2)*x(2^1)*x(0^0),对,大概就是这个样子。就是在1的位置上需要乘2. 

代码1-递归

class Solution {
public:
    double Power(double base, int exponent) {
        if(exponent<0){
            return 1.0/compute(base,-1*exponent);
        }else return compute(base,exponent);
    }
    
    double compute(double base,int exp){
        if(exp==0){
            return 1.0;
        }
        else return base*compute(base,exp-1);
    }
};

代码2-快速幂

class Solution {
public:
    double Power(double base, int exponent) {
        if(exponent<0){
            exponent=-exponent;
            base=1/base;
        }
        double ans=1;
        //base:
        while(exponent>0){
            //二进制位数为1的,乘到答案里
            if(exponent&1==1){
                ans=ans*base;
            }
            base*=base;
            exponent>>=1;//右移一位,相当于除2
        }
        return ans;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值