快速幂

发布于 2017-11-26  1.54k 次阅读


正常算2^11的时候一般是这样:把2连乘11次,但数字较大时没办法算出来,所以需要快速幂。快速幂就是把次方11拆为二进制数1011,11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1,2^11 = 2^(2º×1) + 2^(2¹×1) + 2^(2³×1),化简为2^11 = 2^(2³×1 + 2¹×1 + 2º×1)

代码

#include 
#include 
using namespace std;
int power(int a, int b)
{
	int ans = 1;	
	while(b != 0)				
	{
		if(b & 1 != 0)		//&1取b的二进制数最后一位
			ans *= a;		 
		a *= a;
		b >>= 1;		//运算完后去掉b二进制数中最后一位,用">>="来处理 
	}
	return ans;	
}
int main()
{
	int a, b, ans;
	cin >> a >> b;
	ans = power(a,b);
	cout << ans << endl;	
}