需要求解幂运算的解法,可以将需要运算的内容进行判别,众所周知,幂就是指数,就是将底数乘以自身完成n次自相乘,那么就可以幻化为他的幂的简化计算;
以二进制为例,你要求,即可以看作是,自习观察可以看作是1+8+16,同样化为2进制,即求25的二进制,可以得出为11001;
这时候如果你的幂是负数,则可以先取反幂,再将底数变为原先的倒数;
由此可以整理一个完整的流程
1.先判定幂n是否小于零,小于零跳到步骤2,大于零跳到步骤3,等于零直接返回结果1;
2.幂取反,底数变为原先的倒数;
3.将ans设定为1,底数a变为二进制来看,运用位运算,判定最低位是否为1,(a&1);
4.若最低位为1,则ans=ans*a,若不为1,则a=a*a,底数平方;
5.将底数n位数右移;
完整代码:
class Solution {
public:
double myPow(double x, int N) {
double ans=1;
long long n=N;
if(n<0){
n=-n;
x=1/x;
}
while(n){
if(n&1) ans*=x;
x*=x;
n>>=1;
}
return ans;
}
};
参考:. - 力扣(LeetCode)