实现 pow(x, n) ,即计算 x 的 n 次幂函数。
输入: 2.00000, 10 输出: 1024.00000
输入: 2.10000, 3 输出: 9.26100
输入: 2.00000, -2 输出: 0.25000 解释: 2-2 = 1/22 = 1/4 = 0.25
class Solution {
public:
double myPow(double x, int n) {
double res=1.0;
double flag=x;
if(n>pow(2,31)-1||n<-pow(2,31))return 0.0;
if(n>0){
while(n>0){
if(n&1) res*=flag;//指数n是奇数
flag*=flag;
n>>=1;
}
if(res>pow(2,31)-1||res<-pow(2,31)) return 0.0;
}
else if(n<0){
int N=-n-1;
while(N>0){
if(N&1) res*=flag;//指数n是奇数
flag*=flag;
N>>=1;
}
res=1/(res*x);
if(res>pow(2,31)-1||res<-pow(2,31)) return 0.0;
}
else if(n==0) return 1.0;
return res;
}
};
class Solution {
public:
double res;
double myPow(double x, int n) {
if(n>pow(2,31)-1||n<-pow(2,31)) return 0.0;
if(n==0) return 1.0;
else if(n>0){
if(res>pow(2,31)-1||res<-pow(2,31)) return 0.0;
if(n%2==0) res=myPow(x*x,n/2);//指数为偶数
if(n%2==1) res=x*myPow(x*x,n/2);//指数为奇数
return res;
}
else{
int N=-n-1;
if(res>pow(2,31)-1||res<-pow(2,31)) return 0.0;
if(N%2==0) res=myPow(x*x,N/2);
if(N%2==1) res=x*myPow(x*x,N/2);
res=1/(x*res);
return res;
}
}
};
快速幂运算,可以看做是按位进行的一种取幂运算
举个例子:
看图:指数n不断除2
公式res:3^13 = (3^1) * (3^4) * (3^8) = [3^(2^0)] * [3^(2^2)] * [3^(2^3)]
附大佬应用快速幂的题目链接:https://www.cnblogs.com/dilthey/p/7868362.html