美文网首页
剑指 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