题目描述
实现函数 double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题。
解题思路
如果我们要求的exponent是32,而且此时我们已经知道了它的16次方,那么只需要给其16次方求一次平方即可,而16次方是8次方的平方,以此类推,我们求32次方时只需要做5次乘法:先求平方,在平方的基础上求4次方,在4次方的基础上求8次方,在8次方的基础上求16次方,在16次方的基础上求32次方。可以得到如下的公式
代码实现
double Power(double base, int exponent)
{
if (exponent == 0) return 1;
if (exponent == 1) return base;
double result = Power(base, exponent >> 1);
result *= result;
if (exponent & 0x1 == 1)
result *= base;
return result;
}