递归快速幂基准于 n次方的n==0的情况
非递归快速幂采用位移运算。将x的n次方拆分成,m是2的某个次方,m/2<n,m>=n。
#include<stdio.h>
typedef long long ll;
ll xxx(ll x,ll n);
int main(){
ll x,n;
scanf("%lld %lld",&x,&n);
printf("%lld",xxx(x,n));
return 0;
}
/*
ll xxx(ll x,ll n){//递归快速幂
if(n%2==0){
if(n==0) return 1;
else{
ll tem=xxx(x,n/2);
return tem*tem;
// return xxx(tem,2);
}
}
else{
n--;
return x*xxx(x,n);
}
}
*/
ll xxx(ll x,ll n){//非循环快速幂
ll tem=x,sum=1;
while(n){
if(n&1) sum*=tem;
tem*=tem;
n>>=1;
}
return sum;
}