zoukankan      html  css  js  c++  java
  • 剑指offer-11.数值的整数次方实现power

    0 题目

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

    1 分析

    输入的exp指数可能是负数,base可能是0.但因为是double所以不能用等号判断

    另外当,base是个大数的时候,循环处理计算量大。因此采用,先计算exp/2的base次方,然后结果翻倍,再判断exp是否是奇数,如果是奇数,再乘依次base

    double Power(double base, int exp)
    {
        // exp 为0,直接输出 -1
        if (exp == 0)
        {
            return 1;
        }
        // base 为0 ,直接输出0
        if (base < 0.00001 && base > -0.00001)
        {
            return 0;
        }
    
        // 计算
        double ret = aux(base, exp > 0 ? exp : -exp);
    
        // 考虑exp为负的情况
        if (exp > 0)
        {
            return ret;
        }
        else
        {
            // exp为负,输出他的倒数
            return 1 / ret;
        }
    }
    double aux(double base, int exp)
    {
        if (exp == 0)
        {
            return 1;
        }
    
        // 这里将 exp 分成3部分计算。 也就是 exp/2 ,exp/2 和 exp 是奇数的时候需要除1
    
        double ret = aux(base, exp >> 1);
    
        // 翻倍
        ret *= ret;
    
        // 是奇数
        if (exp & 0x1)
        {
            ret *= base;
        }
        return ret;
    }
    

      

  • 相关阅读:
    oracle11g静默安装
    pv vg lv
    oracle日志表
    oracle常用sql
    vulnhub~muzzybox
    vulnhub~sunset:dusk1
    vulnhub~MyExpense
    vulnhub~DC-9
    汇编学习一
    贪心算法和动态规划
  • 原文地址:https://www.cnblogs.com/perfy576/p/8606908.html
Copyright © 2011-2022 走看看