思想:
将指数二进制分解:
#include<cstdio>
int ksm(int x,int y) {
int ans = 1;
while(y) {
if(y & 1) ans *= x;//pow(2,11) 先转化为二进制 11 -> 1011 pow(x,11) = pow(x,2的4次方) + pow(x,2的2次方) + pow(x,2的1次方)
//如果与0001 & 不为0 则说明可以乘x
y >>= 1;//1011 -> 101(此处的‘1’的 权 是 x*x )
x *= x;//重点!更新x的值 使得下一次 ans *= x时 自乘的是 权
}
return ans;
}
int main(){
int x,y;
scanf("%d%d",&x,&y);
printf("%d",ksm(x,y));
}