// 面试题16:数值的整数次方 | |
// 题目:实现函数double Power(double base, int exponent),求base的exponent | |
// 次方。不得使用库函数,同时不需要考虑大数问题。 |
代码实现如下:
#include<iostream>
using namespace std;
//考虑正负0指数,以及base是0的特殊情况
double Power(double base,int exponent);
double Power_2(double base,int exponent);
double Power_2_core(double base,int exponent);
bool equal(double num1, double num2);//判断两个double值是否相等
void test(double base,int exponent);
int main(){
test(0,0);
test(0,3);
test(0,-4);
test(2,0);
test(3,1);
test(3,5);
test(3,-3);
test(-3,-3);
test(-4,3);
return 0;
}
void test(double base,int exponent){
cout<<base<<"^"<<exponent<<" = "<<Power_2(base,exponent)<<endl;
}
bool equal(double num1, double num2){
if( (num1 - num2) > -0.0000001 || (num1 - num2) > 0.0000001)
return true;
return false;
}
double Power(double base,int exponent){
double res = 1;
try{
if(base == 0 && exponent < 0)
{
throw "0的指数不能为负数,没有意义";
}
}
catch(const char *str){
cout<<str<<endl;
return 0.0;
}
if(base == 0 && exponent == 0)
return 0;
else if(base == 0)
return 0;
else if(exponent == 0)
return 1;
int exp = exponent;
if(exp < 0){
exp *= -1;
}
for(int i=0;i<exp;i++)
res *= base;
if(exponent < 0)
res = 1 / res;
return res;
}
double Power_2(double base,int exponent){
double res = 1;
try{
if(base == 0 && exponent < 0)
{
throw "0的指数不能为负数,没有意义";
}
}
catch(const char *str){
cout<<str<<endl;
return 0.0;
}
if(base == 0 && exponent == 0)
return 0;
else if(base == 0)
return 0;
else if(exponent == 0)
return 1;
if(exponent > 0)
return Power_2_core(base,exponent);
else{
return 1 / Power_2_core(base,-1 * exponent);
}
}
double Power_2_core(double base,int exponent){
if(exponent == 1)
return base;
if(exponent == 0)
return 1;
/*
if(exponent %2 == 0){
return Power_2_core(base,exponent / 2) * Power_2_core(base,exponent / 2);
}else
return Power_2_core(base,(exponent-1) / 2) * Power_2_core(base,(exponent-1) / 2) * base;
*/
double result = Power_2_core(base,exponent >> 1);
result *= result;
if(exponent &0x1 == 1)
result *= base;
return result;
}
运行结果如下: