• 数值的整数次方


    题目描述

    给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
     
    基本思想:首先考虑一下所有可能的情况,以及边界条件。
    1. 指数为正数,正常算出次方的结果。
    2. 指数为负数的一般情况:先对指数求绝对值,然后算出次方的结果,再取倒数。
    3. 指数为负数的特殊情况:底数为0。
    4. 指数为0,底数为0的情况。
     
    在这里,设置了一个全局变量global来标识是否出错。当输入值为非法输入时,返回值为0,将global的值值为true。正常的返回值为0的情况下 ,global的值为false;
    另外,判断底数base是不是等于0时,不能直接写成base == 0,因为在计算机内表示小数时都有误差。判断两个小数是否相等,只能判段它们之差的绝对值是不是在一个很小的范围内。如果两个数的差值很小,就可以认为他们相等。这也是equal()函数存在的意义。
    #include <iostream>
    #include <algorithm>
    #include "string.h"
    #include "stdio.h"
    #include <vector>
    #include <deque>
    #include <stack>
    #include <map>
    #include <utility>
    #include "math.h"
    using namespace std;
    bool global = false;
    class Solution {
    public:
        double Power(double base, int exponent) {
            if(base == 0.0&&exponent == 0.0)
                return 0.0;
            unsigned int absexponent = (unsigned int) (exponent);
            if(exponent<0)
            {
                if(equal(base,0.0))
                {
                    global = true;
                    return 0.0;
                }
                absexponent = (unsigned int)(-exponent);
            }
            double result = PowerExponent(base,absexponent);
            if(exponent<0)
                result = 1.0/result;
            return result;
        }
    
        double PowerExponent(double base,int absexponent)
        {
            double result = 1.0;
            for(int i=0;i<absexponent;i++)
            {
                result*=base;
            }
            return result;
        }
    
        bool equal(double num1,double num2)
        {
            if((num1-num2>-0.0000001)&&(num1-num2<0.0000001))
                return true;
            else
                return false;
        }
    };
    int main()
    {
        Solution solution;
        double count = solution.Power(0,-1);
        cout<<count<<endl;
        cout<<global<<endl;
    }
     
  • 相关阅读:
    【11平台天梯】【原理分析】11平台天梯原理分析
    2020年8月11日
    2020年8月10日
    2020年8月12日
    2020年8月9日
    2020年8月13日
    2020年8月8日
    2020年8月7日
    2020年8月6日
    2020年8月14日
  • 原文地址:https://www.cnblogs.com/omelet/p/6653100.html
Copyright © 2020-2023  润新知