题目描述

代码:
class Solution {
public:
double myPow(double x, int n) {
double res=1;
long b = n;//不加这个,下面b取反后就有可能会越界
if(n==0||x==1){
res=1;
}
else if(n>0){
res=quick(x,n);
}
else if(n<0){
b=-b;
res=(1.0/quick(x,b));
}
return res;
};
//快速幂算法
double quick(double x,long n){//这个n要弄成long,这样在测试指数为-2147483648(int的下限)这个的时候,但是取反的之后这个正数int补码是取不到的,所以这里要用long来扩大范围。
double res2=1.0;
while(n>0){
if((n&1) != 0){
res2*=x;
}
x*=x;//就是指数化为二进制后的操作
n>>=1;
}
return res2;
}
};
本文解析了如何使用快速幂算法高效计算数值的整数次方,包括代码实现和边界条件处理,适合面试准备和算法理解提升。
1428

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



