题目描述
给定一个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; }