快速幂:

思想:
将指数二进制分解:

#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));
}

自己选择的路,跪着也要走完。
原文地址:https://www.cnblogs.com/tyner/p/10701726.html