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;
        }
    }

    思考:

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

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

  • 相关阅读:
    ES6特性
    使用mybatis插件拦截SQL
    前端下载文件的几种方式
    Electron-vue项目使用 Inno Setup 创建安装包
    Windows powershell 常用代码段
    Java8之Predicate, Consumer,Function基础使用
    Java8之Predicate接口使用
    使用Replica Set副本集方式搭建mongodb副本集群
    Typora的一些偏好设置
    使用Typora编写md文档并优雅地上传到博客园
  • 原文地址:https://www.cnblogs.com/Mr-Zhong/p/4161856.html
Copyright © 2011-2022 走看看