class Solution {
public double myPow(double x, int n) {
if(n==0) return 1;
if(n==-1) return 1/x;
boolean odd=(n&1)==1;
double half=myPow(x,n>>1);
half*=half;
return odd?half*x:half;
}
}
class Solution {
//快速幂
public double myPow(double x, int n) {
boolean neg=n<0;
long m=neg?-(long)n:n;
double res=1;
while(m>0){
if((m&1)==1){
res*=x;
}
x*=x;
m>>=1;
}
return neg?1/res:res;
}
}
设计一个算法计算x的y次方模z的结果
public static int powMod(int x,int y,int p) {
//(a*b)%p=((a%p)*(b%p))%p
if(y<0||z==0) return 0;
int res=1;
x=x;
while(y>0) {
if((y&1)==1) {
res=(res*x)%p;
}
x=(x*x)%p;
y>>=1;
}
return res;
}