快速幂运算代码。有点绕,建议多看几遍理解
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;
}
};