0. Pow(x, n)(快速幂)

快速幂

在这里插入图片描述

示例

/**
* 50. Pow(x, n)
* 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。
	示例 1:
	
	输入:x = 2.00000, n = 10
	输出:1024.00000
	示例 2:
	
	输入:x = 2.10000, n = 3
	输出:9.26100
	
	链接:https://leetcode-cn.com/problems/powx-n
*/
class Solution {
    public double myPow(double x, int n) {
    	// 当n为负数最大值时,不能直接转为正数计算,否则会造成正数溢出(正数最大值比负数最大值小1)
    	// 所以这里将n转为long类型
        long tmpN = n;
        if(n < 0){
        	// 不能写成tmpN = -n;需要先强制转换为long类型后才进行操作
            tmpN = Math.abs((long)n);
        }
        double ans = 1.0;
        // 快速幂本质思想就是将n看为二进制数,然后判断二进制末尾是否为1,如果为1,则进行累乘,否则不乘
        while(tmpN > 0){
            if((tmpN & 1) == 1) ans *= x;
            x *= x;
            tmpN >>= 1;
        }
        return n < 0 ? (1.0/ans) : ans;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值