剑指offer:数值的整数次方

Posted _阿锋丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer:数值的整数次方相关的知识,希望对你有一定的参考价值。

文章目录

题目描述

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

思路及代码

方法一:暴力方法

很显然就是n个b相乘。循环n次。

class Solution 
public:
    double Power(double base, int exponent) 
        if(exponent == 0)
            return 1;
        
        if(exponent<0)
            base = 1/base;
            exponent = -exponent;
        
        double res = base;
        while(exponent>1)
            exponent--;
            base = base * res;
            
        
        return base;
    
;

方法二:递归法(快速幂)

class Solution 
public:
    double recursion(double b,int n)
        if(n==0)
            return 1.0;
        double ret = recursion(b,n/2);
//        n&1判断为1就是奇数,因为奇数的二进制最后一位永远都是1
        if(n&1)
            return ret*ret*b;
        
        else
            return ret*ret;
        
    
    double Power(double base, int exponent) 
        if(exponent<0)
            base = 1 / base;
            exponent = -exponent;
        
        return recursion(base,exponent);
    
;

方法三:非递归的快速幂

class Solution 
public:

    double Power(double b, int n) 
        if (n < 0) 
            b = 1 / b;
            n = -n;
        
        double x = b; // 记录x^0, x^1, x^2 ...
        double ret = 1.0;
        while (n) 
            if (n&1) 
                ret *= x; // 二进制位数是1的,乘进答案。
            
            x *= x;
//             算术右移一位;比如3(11)右移一位变成1(1)
            n >>= 1;
        
        return ret;
    
;

以上是关于剑指offer:数值的整数次方的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer 12. 数值的整数次方

剑指offer之 数值的整数次方

剑指offer 12.数值的整数次方

《剑指offer》第十六题(数值的整数次方)

剑指offer数值的整数次方

数值的整数次方-剑指Offer