题一

方法一:要考虑全面,包括当指数为负时
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;
}
};
本文介绍了计算幂的两种方法:一种是循环迭代法,适用于直接理解幂的概念;另一种是递归法,通过位操作和模运算提高计算效率,特别适合处理大数幂运算。文章深入解析了每种方法的实现细节,帮助读者掌握幂运算的高效编程技巧。
2752

被折叠的 条评论
为什么被折叠?



