题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
#include <exception>
#include <iostream>
using namespace std;
bool g_InvalidInput = false;
bool equal(double num1, double num2) {
if ((num1 - num2 > -0.0000001) && (num1 - num2 < 0.0000001))
return true;
else
return false;
}
double powerunsigned(double base, unsigned int exponent) {
if (exponent == 0)
return 1;
if (exponent == 1)
return base;
double result = powerunsigned(base, exponent >> 1);
result *= result;
if ((exponent & 0x1) == 1)
result *= base;
return result;
}
double power(double base, int exponent) {
g_InvalidInput = false;
if (equal(base, 0.0) && exponent < 0) {
g_InvalidInput = true;
return 0.0;
}
unsigned int absExponent = (unsigned int)exponent;
if (exponent < 0)
absExponent = (unsigned int)(-exponent);
double result = powerunsigned(base, absExponent);
if (exponent < 0)
result = 1.0 / result;
return result;
}
int main() {
int n = 0;
double base = 0;
double result = power(base, n);
cout << result << endl;
return 0;
}