二分求幂

求a^b,直接b次循环,当b较大时会比较慢,比如,2 ^32当求出2 ^16时,没必要再循环,直接让2 ^16自乘就可得。16推8,8推4,4推2,2推1 。
举例:2的13次方;
13:1101
2的13次方,就是2的1次方 * 2的4次方 * 2的8次方。
1,4,8分别是,13的二进制数的十进制值。
所以,依次判断b的最后位是否为1,是,让ans*a,b再除以2,相当于右移一位,b/2,对应的a就得平方。再判断新的最后一位,以此类推,知道遍历完b的二进制树。

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,b;
	while(scanf("%d %d",&a,&b)!=EOF){
		int ans = 1;
		while(b!=0){//b转换为2进制未结束 
			if(b&1==1){
				ans = ans*a;
			}
			b = b>>1;
			a = a*a; //b除以2,即a的幂少了一半,所以a要平方;a^4 = a^2*a^2 
		}
		printf("%d\n",ans);
		
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_37762592/article/details/88736638