• 数值的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;
        }
    }

    思考:

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

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

  • 相关阅读:
    学习笔记-- android动画简述
    解决android textview 混合文字、数字换行后对列不齐
    android 瀑布流效果 保存地址
    android 查看MD5、sha1值命令
    android 生成.keystore文件
    读取手机上所有应用程序并显示(APP)
    安卓学习入门地址
    用 Python 理解服务器模型(下)(转载)
    轻松学会Python列表解析式(转载)
    Python使用struct处理二进制(转载)
  • 原文地址:https://www.cnblogs.com/Mr-Zhong/p/4161856.html
Copyright © 2020-2023  润新知