【题目:】
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
【输入输出描述】
// 底数、指数都为正数
Test("Test1", 2, 3, 8, false);
// 底数为负数、指数为正数
Test("Test2", -2, 3, -8, false);
// 指数为负数
Test("Test3", 2, -3, 0.125, false);
// 指数为0
Test("Test4", 2, 0, 1, false);
// 底数、指数都为0
Test("Test5", 0, 0, 1, false);
// 底数为0、指数为正数
Test("Test6", 0, 4, 0, false);
// 底数为0、指数为负数
Test("Test7", 0, -4, 0, true);
【参考答案】
#include<iostream>
#include<vector>
#include<string>
#include<sstream>
//#include<set>
//#include<unordered_map>
#include <algorithm>
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 PowerWithUnsignedExponent(double base, unsigned int exponent)
{
if (exponent==0)
{
return 1;
}
if(exponent == 1)
{
return base;
}
double result = PowerWithUnsignedExponent(base, exponent >> 1);
result *= result;
if ((exponent&1)==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 = PowerWithUnsignedExponent(base, absExponent);
if (exponent < 0)
{
result = 1.0 / result;
}
return result;
}
int main()
{
double res = Power(2, 4);
if (g_InvalidInput)
{
cout << "InvalidInput" << endl;
}
else
{
cout << res << endl;
}
return 0;
}
/****
***/