题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
时间限制:1秒 空间限制:32768K
看到题就知道,这个题考的应该是位运算而不是简单的循环计算,试了一下,最笨的循环计算方法竟然可以通过。
代码:
class Solution {
public:
double Power(double base, int exponent) {
double res = 1;
if(exponent >= 0){
for(int i = 0;i < exponent;i++){
res *= base;
}
}
else{
for(int i = 0;i < -exponent;i++){
res *= base;
}
res = 1 / res;
}
return res;
}
};
方法二:快速幂方法
思路:
代码:
class Solution {
public:
double Power(double base, int exponent) {
double res = 1,curr = base;
int b;
if(exponent>0){
b = exponent;
}else if(exponent<0){
b = -exponent;
}
while(b!=0){
if((b&1)==1)
res*=curr;
curr*=curr;// 翻倍
b>>=1;// 右移一位
}
return exponent>=0?res:(1/res);
}
};