美文网首页
剑指 offer:12、数值的整数次方

剑指 offer:12、数值的整数次方

作者: 云中的Jason | 来源:发表于2019-04-21 16:10 被阅读0次

12. 数值的整数次方

题目描述

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

解题思路:

  • 思路1:直接求解
  • 思路2:简单快速幂:
    • 写出指数的二进制表达,例如13的二进制为1101
    • 以底数为10为例:10^13 = 10^1101 = 10^0001 * 10^0100 * 10^1000

解答:

// 方法1
class Solution {
public:
    double Power(double base, int exponent) {
        double res = 1.0;
        if(exponent == 0)
            return 1;
        if(exponent < 0)
        {
            if(base == 0)
                throw "The denominator cannot be 0";
            else
                base = 1.0 / base;
        }
        while(exponent)
        {
            res *= base;
            exponent = (exponent > 0) ? --exponent : ++exponent;
        }
        return res;
    }
};
// 方法2:
class Solution {
public:
    double Power(double base, int exponent) {
        double res = 1.0;
        int flag = 1; // 指数正负标志位,1为正
        if(exponent == 0)
            return 1;
        if(exponent < 0)
        {
            if(base == 0)
                throw "The denominator cannot be 0";
            else
                exponent = -exponent;
            flag = 0;
        }
        while(exponent != 0)
        {
            if((exponent & 1) == 1)
                res *= base;
            base *= base;
            exponent >>= 1;
        }

        return flag ? res : (1 / res);
    }
};

大家有兴趣可以访问我的个人博客,不定时更新一些内容哦!

图片来自必应壁纸

相关文章

网友评论

      本文标题:剑指 offer:12、数值的整数次方

      本文链接:https://www.haomeiwen.com/subject/kgrjgqtx.html