题目描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解题思路:
这个题要求类似于库函数pow的功能。
1. 在编写代码前,首先需要考虑三种情况:
(1)输入的指数大于0;
(2)输入的指数等于0;
(3)输入的指数小于0;
在数学中,我们学过任何数的0次方都为1;任何数的1次方都为它本身。
2. 考虑完可能出现的情况之后,就要来考虑如何解题。
我最先想到的是用循环来求解,指数是多少,就乘等多少次;但是如果指数较大的话,就会循环很多次。我在书上看到了一种简便的解题方法,如下公式:
用上面公式实现的求解过程如下:
double Power(double base, int exponent)
{
double result = 0;
if(exponent > 0)
{
if(exponent == 1)
return base;
result = Power(base,exponent>>1); //用右移>>代替除号/
result *= result;
if(exponent%2 == 1)
{
result *= base;
}
}
if(exponent == 0)
return 1;
if(exponent < 0)
{
result = 1/Power(base,0-exponent);
}
return result;
}
}