数值的整数次方

题目描述

给定一个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;
}
 
原文地址:https://www.cnblogs.com/omelet/p/6653100.html