描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 分析:求double类型的exponent次方 思路一:递归。由于次方可以看做一个不断相乘的过程,因此每次递归调用函数进行相乘就可以达到目的。
class Solution {
public:
double Power ( double base, int exponent) {
if ( exponent == 0 ) return 1.0 ;
else if ( exponent > 0 ) {
if ( exponent == 1 ) return base;
else if ( exponent % 2 == 0 ) return Power ( base, exponent / 2 ) * Power ( base, exponent / 2 ) ;
else return Power ( base, exponent / 2 ) * Power ( base, exponent / 2 + 1 ) ;
} else {
return 1 / Power ( base, - exponent) ;
}
}
} ;
思路二:简单快速幂。运用幂计算的性质,将exponent按位逐位读取,累乘到最终结果。 例如当base=2.4,exponent=5(101)2 时,res = 2.4001(1)10 *2.4100(4)10 = 2.4101(5)10 例如当base=2.4,exponent=6(110)2 时,res = 2.4010(2)10 *2.4100(4)10 = 2.4110(6)10
class Solution {
public:
double Power ( double base, int exponent) {
if ( exponent == 0 ) return 1.0 ;
int temp = abs ( exponent) ;
int res = 1.0 ;
while ( temp) {
if ( temp & 1 ) res * = base;
base * = base;
temp >>= 1 ;
}
return exponent > 0 ? res : 1.0 / res;
}
} ;