剑指offer:面试题16. 数值的整数次方

题目:数值的整数次方

实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

示例 1:

输入: 2.00000, 10
输出: 1024.00000

示例 2:

输入: 2.10000, 3
输出: 9.26100

示例 3:

输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25

解题:

如果我们求一个数字的32次方。除了用32个这个数字相乘。
我们还可以,求2数字的平方。在平方的基础上,求4次方。4次方的基础上,求8次方。8次方的基础上,求16次方。16次方的基础上,求32次方。
那么我们一定会用到下面的公式

//运行时间:3ms
//占用内存:480K
class Solution {
public:
    bool g_InvalidInput = false;//设置输入变量标志位,True代表出现0的非正整数次方计算
    double Power(double base, int exponent) {
    g_InvalidInput = false;
    
    if((base==0.0)&&exponent<=0)//计算0的非正整数次方,标志为为true,返回0.0
    {
        g_InvalidInput = true;
        return 0.0;
    }
    
    double result = myPow(base,exponent);//获取base的真整数次方
    if(exponent<0) result = 1/result;//如果指数是负数 求结果的导数
    return result;
    }
    
    //计算base的正整数次方
   double myPow(double base, int exponent)
    { 
        if(exponent==0)
            return 1;
        if(exponent==1)
            return base;
   
        double result =myPow(base,exponent/2);
       //可替换代码1:double result =PowerCompute(base,exponent>>1);用右移运算符代替除以2//可能会显示超出内存
        result *=result;
        if(exponent%2)
        //可替换代码2:if(exponent &0x1 ==1) 用位与运算符代替求余运算符号
            result *= base;
        return result;
    }
};
发布了106 篇原创文章 · 获赞 113 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/qq_41598072/article/details/104415816
今日推荐