简单的递推指数快速幂

题目

给出一个浮点数base,和他的指数次方exponent,求结果

考虑到二进制,另curr = base,当exponent & 1 == 1时,证明当前最右位为1,此时res = res*curr,随后exponent右移一位,此时curr应当翻倍, 循环执行,当exponent为0 时,停止,时间复杂度为exponent 的二进制位数,大大降低。

代码如下:

public double pow(double base,int exponent){
	double res = 1;
	double curr = base;
	boolean flag = false;
	if(exponent < 0){
		flag = true;
		exponent = -exponent;
	}
	while(exponent > 0){
		if((exponent&1) == 1)
			res *= curr;
		exponent >>= 1;
		curr *= curr;  
	}
	return flag?1/res:res;
}
发布了18 篇原创文章 · 获赞 2 · 访问量 389

猜你喜欢

转载自blog.csdn.net/weixin_40907792/article/details/103968318