zoukankan      html  css  js  c++  java
  • 【剑指offer】数值的整数次方

    题目描述

    给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
     
     
    思路:
    这题卡在没想到exponent可以是负数了...
     
    自己想了一个比较好的方法,非递归,O(logN)算法
    举例说明吧:设base = 2.5, exponent = 99
    我们每次都会把base的幂次加倍
    base 1   2.5
    base2    base1*base1
    base4    base2*base2
    base8    base4*base4
    base16   base8*base8
    base32   base16*base16
    base64   base32*base32
     
    在计算的时候,只需要通过base 1* base2* base32 * base64 就可以得到99次幂
    但是如何才能知道那个幂次的值需要乘进去,我们想到了exponent的二进制表达
    凡是需要乘入的,exponent的二进制表达中那一位一定为1.
    所以我们只要每次一平方的时候把判断的位数向后移一位即可。
    double Power(double base, int exponent) {
            if(exponent < 0) //处理负数,这里最开始没想到 卡了很久
            {
                base = 1 / base;
                exponent = (-exponent);
            }
            double d = base;
            double ans = 1;
            int bit = 1;
             
            while(exponent != 0)
            {
                if((exponent & bit) != 0) //如果exponent的当前位是1
                {
                    ans *= d;
                    exponent &= (exponent - 1);
                }
                d = d * d;
                bit = bit << 1;
            }
     
            return ans;
        }

    递归版本

    double Power(double base, int exponent) {
            if(exponent < 0)
            {
                base = 1 / base;
                exponent = (-exponent);
            }
            if(exponent == 0)
                return 1;
            else
            {
                double tmp = Power(base, exponent >> 1);
                if((exponent & 0x1) == 0)
                    return tmp * tmp;
                else
                    return tmp * tmp * base;
            }
        }
  • 相关阅读:
    二人pk答题小程序
    题解【CF911F】Tree Destruction
    题解【洛谷P5765】[CQOI2005]珠宝
    WC2021 游记
    生产环境财务BUG的排查与总结
    生产环境一个订单状态错误的排查与反思
    《HeadFirstServletAndJsp》笔记一
    Java泛型简介二
    Java泛型简介一
    在Windows环境下与Linux环境下快速计算文件Hash
  • 原文地址:https://www.cnblogs.com/dplearning/p/4674477.html
Copyright © 2011-2022 走看看