题一
方法一:要考虑全面,包括当指数为负时
class Solution {
public:
double Power(double base, int exponent) {
if(base==0 && exponent==0)
return 0;
if(base==0 && exponent<0)
return 0;
int sum=1.0;
int exp=abs(exponent);
while(exp)
{
sum*=base;
exp--;
}
if(exponent>0)
return sum;
//当指数为负时,由于结果是double类型,所以不可以写成1/sum
// 因为 1/sum = 0
return 1.0/sum;
}
};
方法二:使用递归的思路:
class Solution {
public:
double Power(double base, int exponent) {
if(base==0 && exponent==0)
return 0;
if(base==0 && exponent<0)
return 0;
int exp=abs(exponent);
double ans=AbsPower(base,exp);
if(exponent>0)
return ans;
return 1.0/ans;
}
double AbsPower(double base, unsigned int exp){
if(exp==0)
return 1;
if(exp==1)
return base;
// 通过位右移来代替除2,提高效率
double result=AbsPower(base,exp>>1);
result=result*result;
//通过与运算来代替取模运算,提高效率
if(exp & 0x1==1)
result*=base;
return result;
}
};