剑指Offer面试题16: 数值的整数次方

// 面试题16:数值的整数次方

// 题目:实现函数double Power(double base, int exponent),求base的exponent

// 次方。不得使用库函数,同时不需要考虑大数问题。
代码实现如下:
#include
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< -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< 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;
	
}

运行结果如下:

剑指Offer面试题16: 数值的整数次方_第1张图片

你可能感兴趣的:(C++,算法,剑指Offer,剑指Offer)