zoukankan      html  css  js  c++  java
  • 数值的N次方

    问题描述:

    实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,

    同时不需考虑大数问题。

    思路分析:

    要是你秒秒钟想到一个循环搞定估计面试没戏了。要考虑指数为0和负数的情况,如果底数也

    为0了?为负数时就是相当于要求正数时的倒数,这是又要考虑分母为0.

    参考代码:

    bool g_inputInvalid = false;

    double Power(double base,int exponnet)
    {
        g_inputInvalid = false;
        if (Equal(base,0) && exponnet < 0)
        {
            g_inputInvalid = true;
            return 0.0;
        }
        unsigned int abExponent = (unsigned int)(-exponnet);
        if (abExponent < 0)
        {
            abExponent = -abExponent;
        }
        double result = PowerWithUnsignedExponent(base,abExponent);
        if (exponnet < 0)
        {
            result = 1.0/result;
        }
        return result;
    }
    double PowerWithUnsignedExponent(double base,unsigned int exponnet)
    {
        if (exponnet == 0)
        {
            return 1;
        }
        if (exponnet == 1)
        {
            return base;
        }
        double result = PowerWithUnsignedExponent(base,exponnet>>1);//每次求出基数的偶数次方减少循环
        result *=result;//用了一公式a^n = a^(n/2)*a^(n/2) 或者a^n = a^((n-1)/2)*a^((n-1)/2)*a
        if (exponnet &0x1 == 1)//判断指数是偶数还是奇数,奇数要再乘一次底数
        {
            result *= base;
        }
        return result;
    }
    bool Equal(double nNum1,double nNum2)
    {
        if ((nNum1-nNum2 > -0.0000001) && (nNum1-nNum2 < 0.0000001))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    思考:

    一个细节得注意,在判断两个小数是否相等时不能直接用 == 去判断,因为在计算机内表示小数时都有误

    差,所以只能判断它们的绝对值是不是在一个很小的范围内。

  • 相关阅读:
    Vue 框架-09-初识组件的应用
    Vue 框架-08-基础实战 demo
    Vue 框架-07-循环指令 v-for,和模板的使用
    Vue 框架-06-条件语句 v-if 实现选项卡效果
    Vue 框架-05-动态绑定 css 样式
    Vue 框架-04-计算属性
    Vue 框架-03-键盘事件、健值修饰符、双向数据绑定
    MUI框架-14-使用自定义icon图标、引入阿里巴巴矢量图标
    在【此电脑】隐藏【设备和驱动器】中不需要的图标
    MUI框架-13-使用百度地图 API(图文教程)
  • 原文地址:https://www.cnblogs.com/Mr-Zhong/p/4161856.html
Copyright © 2011-2022 走看看