快速幂运算代码。有点绕,建议多看几遍理解
int poww (int a, int b) {
int base = a, ans = 1;
while (b) {
if (b & 1) ans *= base;
base *= base;
b >>= 1;
}
return ans;
}
运用此算法可以解决leetcode50题:


这里的测试用例会输入负数和一些奇奇怪怪的边角料数字,对于负数很好办,只需要将base变为倒数就好了。对于那些奇葩的边角料数字,只能一个个排除
代码如下:
class Solution {
public:
double myPow(double x, int n)
{
if(x<0 && n<0) return 1;
if(x==1) return x;
double ans=1;
double base=x;
if(n<0)
{
if ( n <= INT_MIN)
n=INT_MAX;
else
n=-n;
base=1/base;
}
while(n!=0)
{
if(n&1)
ans*=base;
base*=base;
n>>=1;
}
return ans;
}
};
本文介绍了快速幂运算的实现代码,用于解决LeetCode第50题。在处理负数和异常数值时,需要特别考虑,如将负数的底数变为倒数。同时,代码中进行了相应的边界条件检查。提供的解决方案能够处理各种输入情况。
1572

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



